使用正则表达式在HTML5模式属性中验证英国国民保险编号/NINO

Ada*_*ers 3 regex forms validation html5 client-side

我正在尝试验证英国国民保险号码.作为表格的一部分.显然它也需要验证服务器端,但我正在使用新的:valid :invalidCSS伪样式为用户提供表单上的即时反馈.

<input type="text" required="required" pattern="Foo"/>
Run Code Online (Sandbox Code Playgroud)

我根本不能说正则表达.是否有人能够解决这个谜题并为自己和其他人创建一个RegEx以在pattern="#"属性中使用?

如果有帮助,有人已经大致回答了这个问题:正则表达式验证英国国民保险号码.但是,经过测试,答案似乎都没有.

小英国国民保险号信息

格式

号码的格式是两个前缀字母,六个数字和一个后缀字母.

通常使用的示例是AB123456C.

通常,数字印有空格以配对数字,如下所示:AB 12 34 56 C.

道路规则

  • 无论是前两个字母都可以 D,F,I,Q,UV.第二封信也不可能O.
  • 前缀BG,GB,NK,KN,TN,NTZZ未分配.
  • 后缀字母或者是A,B,CD.

sp0*_*00m 6

这个应该适合您的需求:

^(?!BG|GB|NK|KN|TN|NT|ZZ)[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z](?:\s*\d{2}){3}\s*[A-D]$
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

Debuggex可视化

演示:

var regex = /^(?!BG|GB|NK|KN|TN|NT|ZZ)[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z](?:\s*\d{2}){3}\s*[A-D]$/;
var input = document.querySelector("input");
var span = document.querySelector("span");

input.addEventListener("input", function (event) {
  span.innerHTML = regex.test(event.target.value) ? "?" : "?";
}, false);
Run Code Online (Sandbox Code Playgroud)
<input type="text" placeholder="Ex: AB 12 34 56 D" /> <span></span>
Run Code Online (Sandbox Code Playgroud)

  • 在每对字符之间允许任意数量的空格(`\ s*`)的版本:`^(?!BG | GB | NK | KN | TN | NT | ZZ)[ABCEGHJ-PRSTW-Z] [ABCEGHJ-NPRSTW -Z]\S*\d {2}\S*\d {2}\S*\d {2}\S*[AD]`$ (2认同)