Después de leer todas las respuestas aquí han determinado que no hay una respuesta clara a esta pregunta.
Con mi expresión regular deberá quitar todos los espacios de la cadena, pero realmente debería hacerlo de todos modos para validar la mayoría de los datos. Esto se puede lograr fácilmente aquí hay un par de ejemplos.
PHP
preg_replace('/(\s+)|(-)/', '', $str)
Javascript
str.replace(/ /g,'')
Para la validación basada en el asesoramiento de gobierno del Reino Unido (http://www.hmrc.gov.uk/manuals/nimmanual/nim39110.htm) que construye la siguiente expresión regular.
/^[A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}[0-9]{6}[A-D]{1}$/i
Aquí es una explicación de esta expresión regular
/ # Wraps regex
^ # Beginning of string
[A-CEGHJ-PR-TW-Z]{1} # Match first letter, cannot be D, F, I, Q, U or V
[A-CEGHJ-NPR-TW-Z]{1} # Match second letter, cannot be D, F, I, O, Q, U or V
[0-9]{6} # Six digits
[A-D]{1} # Match last letter can only be A, B, C or D
$ # End of string
/i # Ending wrapper and i denotes can be upper or lower case
Éstos son algunos patrones de prueba se puede utilizar
Pass
AA 11 22 33 A
BB 44 55 66 B
ZZ 67 89 00 C
no se
AA 11 22 33 E
DA 11 22 33 A
FA 11 22 33 A
AO 11 22 33 A
Como necesitaba para extender jQuery validar añadir este nuevo número de seguridad social de expresiones regulares También estoy incluyendo esta, ya que puede ser útil para alguien.
jQuery.validator.addMethod('nino', function(nino, element) {
return this.optional(element) || nino.length >= 9 &&
nino.replace(/ /g,'').match(/^[A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}[0-9]{6}[A-D]{1}$/i);
}, 'Please specify a valid national insurance number');
Usted ha dado un mal ejemplo aquí lo que ha provocado algunas de las respuestas a esta pregunta (incluyendo la respuesta aceptada) a equivocarse. Su número NI de ejemplo comienza con QQ. La letra Q no es válida en ninguna de esas posiciones en un número NI. Consulte la respuesta de Andrew Bauer, que detalla las reglas de validación involucradas. – Barrie