En el script que recibe los datos poné esto:
if(!ereg('^[0-9]{4,10}$'), $variable_a_validar) echo 'mal puesto';
Donde:
· ^ indica el comienzo de la cadena.
· $ indica el final de la cadena.
· [0-9] indica el intervalo de caracteres (desde 0 hasta 9 inclusive).
· {4,10} indica la cantidad de caracteres (la cantidad de [0-9]).
Ahora, para indicar que se puede poner un guión en el medio hacé esto:
$regs = null; // Esto va por referencia en la llamada a función.
$valido = ereg('^([0-9]{4})\-([0-9]{2,5})', $variable_a_validar, $regs);
$valido es true si está bien el formato o false si está mal.
El formato del último ereg indica:
Al comienzo de la cadena cualquier carácter entre 0 y 9 inclusive 4 veces, después un guión medio y después cualquier carácter entre 0 y 9 entre 2 y cinco veces inclusive.
Ahora, la variable $regs contiene las cadenas parseadas (lo que se puso entre paréntesis), es decir:
Si hacemos:
$valido = ereg('^([0-9]{4})\-([0-9]{2,5})', '1234-567', $regs);
$regs[0] vale 1234-567
$regs[1] vale 1234
$regs[2] vale 567
Saludos y espero que te sirva, si no entendiste bien podés buscar información en la documentación de PHP sobre el uso de patrones en expresiones regulares.