Dopo aver letto tutte le risposte qui hanno determinato che non c'è una risposta chiara a questa domanda.
Con la mia espressione regolare è necessario rimuovere tutti gli spazi dalla stringa, ma in realtà dovresti farlo comunque per convalidare la maggior parte dei dati. Questo può essere ottenuto facilmente qui ci sono un paio di esempi.
PHP
preg_replace('/(\s+)|(-)/', '', $str)
Javascript
str.replace(/ /g,'')
Per la convalida in base al largo della consulenza governo del Regno Unito (http://www.hmrc.gov.uk/manuals/nimmanual/nim39110.htm) ho costruito la seguente espressione regolare.
/^[A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}[0-9]{6}[A-D]{1}$/i
Ecco una spiegazione di questa regex
/ # 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
Ecco alcuni modelli di prova è possibile utilizzare
Passo
AA 11 22 33 A
BB 44 55 66 B
ZZ 67 89 00 C
Fail
AA 11 22 33 E
DA 11 22 33 A
FA 11 22 33 A
AO 11 22 33 A
Come avevo bisogno di estendere jQuery convalidare per aggiungere questo nuovo numero di assicurazione nazionale regex Sono anche compreso questo come può essere utile per qualcuno.
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');
Hai dato un cattivo esempio qui che ha causato alcune delle risposte a questa domanda (compresa la risposta accettata) di essere sbagliato. Il numero NI di esempio inizia con QQ. La lettera Q non è valida in nessuna di quelle posizioni in un numero NI. Si prega di consultare la risposta di Andrew Bauer che specifica le regole di convalida coinvolte. – Barrie