ここですべての回答を読んだ後、この質問に対する明確な回答はないと判断しました。
私の正規表現では、文字列からすべてのスペースを取り除く必要がありますが、実際にはほとんどのデータを検証するためにこれを行う必要があります。これは簡単に実現できます。いくつかの例を次に示します。
PHP
preg_replace('/(\s+)|(-)/', '', $str)
Javascript
str.replace(/ /g,'')
英国政府のアドバイス ( http://www.hmrc.gov.uk/manuals/nimmanual/nim39110.htm ) に基づく検証のために、次の正規表現を作成しました。
/^[A-CEGHJ-PR-TW-Z]{1}[A-CEGHJ-NPR-TW-Z]{1}[0-9]{6}[A-D]{1}$/i
これがこの正規表現の説明です
/ # 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
使用できるいくつかのテスト パターンを次に示します。
合格
AA 11 22 33 A
BB 44 55 66 B
ZZ 67 89 00 C
失敗
AA 11 22 33 E
DA 11 22 33 A
FA 11 22 33 A
AO 11 22 33 A
この新しい国民保険番号の正規表現を追加するために jQuery 検証を拡張する必要があったため、誰かにとって役立つ可能性があるため、これも含めています。
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');