Expresión regular para que coincida con 7-12 dígitos; puede contener espacio o guión

He estado tratando de resolver un problema de expresión regular de PHP por un tiempo, pero no puedo terminarlo. Necesito escribir una expresión regular que concuerde entre 7 y 12 dígitos (0..9) y opcionalmente puede haber un solo guión o un solo espacio entre los dígitos adyacentes. Esto es lo que tengo hasta ahora …

$match1 = preg_match('/^\d[0-9\-\s]{5,10}\d$/', $number); $match2 = preg_match('/(-\s|\s-|--|\s\s)/', $number); 

Como puede ver, tengo que usar dos controles diferentes y todavía no es suficiente para mí, ya que puedo ingresar esta cadena: ” 1-2-3-4-5 ” y todavía pasará porque hay un total de 9 caracteres pero debería fallar porque solo hay 5 dígitos.

Cualquier ayuda al respecto sería genial, ¡gracias!

Qué tal si:

 /^(\d[-\s]?){6,11}\d$/ 

Prueba esta expresión regular:

 /^\d(?:[-\s]?\d){6,11}$/ 

Esto permite de siete a doce dígitos que pueden estar separados por un guión o un carácter de espacio en blanco.

 ^(?:\d[-\s]?){6,11}\d$ 

Prueba esta expresión regular:

 \d([-\s]?\d){6,11}