我有下面的正则表达式来验证英国国民保险号码
^([a-zA-Z]){2}( )?([0-9]){2}( )?([0-9]){2}( )?([0-9]){2}( )?([a-zA-Z]){1}?$
字符串
接受值为:
AB 12 34 56 A
AB123456A
型
我希望这些价值观也能被接受。有谁能帮我解决这个问题吗?
AB 123456 A
AB 123 456 A
AB 1 2345 6 A
AB 12 34 56 A (multiple space anywhere)
型
即使字符串中有多余的空格或没有空格,RE也应该工作。在RE中可以这样做吗?先谢谢你了。
9条答案
按热度按时间guz6ccqo1#
实际上,NIN不允许前两个字母为D、F、I、Q、U或V,也不允许第二个字母为O;此外,前缀字母不能是BG、GB、NK、KN、TN、NT和ZZ。此外,后缀字母是A、B、C或D,但如果未知,则可以用空格表示。-http://en.wikipedia.org/wiki/National_Insurance_number#Format
因此,更有效的检查将是(我只提供了大写字母的版本,可以很容易地更改为小写字母):
字符串
ghhaqwfi2#
编辑:Andrew Bauer修改了我的答案,添加了对允许/不允许的字符的检查,这些字符在我回答时是未知的。你应该给他的答案投赞成票,因为它更完整,显然执行更好的验证。
如果你不能先删除所有的空格,这应该可以工作:
字符串
说明:
型
更新:根据HMRC网站,最终字母将始终是A,B,C或D,最多只能有1个字母。#referance
goucqfw63#
在阅读了所有的答案后,我确定这个问题没有一个明确的答案。
在我的正则表达式中,你需要去掉字符串中的所有空格,但实际上你应该这样做,以验证大多数数据。这可以很容易地实现这里有几个例子。
PHP语言
第一个月
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
个下面是这个正则表达式的解释
字符串
下面是一些可以使用的测试模式
通过
型
失败
型
由于我需要扩展jQuery validate来添加这个新的国家保险号码regex,我也包括了这个,因为它可能对某些人有用。
型
slmsl1lt4#
我认为最好先将其规范化(删除所有空格字符:
\s
regex替换为空字符串),然后进行验证。字符串
qf9go6mv5#
我找到了一个指向政府XML文档的链接,该文档包含用于验证国民保险的正则表达式:
[A-CEGHJ-NOPR-TW-Z]{2}[0-9]{6}[ABCD\s]{1}
我在网上做了一些正则表达式的测试,似乎工作得很好,只有4个步骤。
https://web.archive.org/web/20121026141031/http://webarchive.nationalarchives.gov.uk/+/http://www.cabinetoffice.gov.uk/media/291296/CitizenIdentificationTypes-v1-4.xml
vuktfyat6#
有一个固定的格式为国家保险号码或NINO。
数字的格式是两个前缀字母、六个数字和一个后缀字母。
前两个字母都不能是D、F、I、Q、U或V。第二个字母也不能是O。前缀BG、GB、NK、KN、TN、NT和ZZ未被分配。
在两个前缀字母之后,六个数字从00 00 00到99 99 99依次发出。最后两位数字决定了一周中支付各种社会保障福利的日期,以及失业申请人需要前往就业中心签字的时间。
后缀字母是A、B、C或D。
使用的示例通常是AB123456C。通常,数字打印有空格来配对数字,如下所示:AB 12 34 56 C.
那么正则表达式应该是
字符串
zu0ti5jz7#
试着清理一下,你可以用这个得到完整的验证:
字符串
基本上被分解了
型
根据Regex101,PCRE2需要34或38个步骤,第二个步骤更慢,但更容易阅读。
两者都适合字母组和数字组之间的空格
都允许大写或小写
hwamh0ep8#
字符串
toe950279#
"(^(?!BG)(?!GB)(?!NK)(?!KN)(?!TN)(?!NT)(?!ZZ)[A-Z&&[^DFIQUV]][A-Z&&[^DFIOQUV]][0-9]{6}[A-D ]$)"
Nino Validator符合以下所有标准。