在阅读了这里的所有答案后,我确定这个问题没有明确的答案。
使用我的正则表达式,您将需要从字符串中删除所有空格,但实际上您应该这样做以验证大多数数据。这可以很容易地实现,这里有几个例子。
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 validate 以添加这个新的国家保险号码正则表达式,因此我也将其包括在内,因为它可能对某人有用。
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');