【问题标题】:Use regex to validate a UK National Insurance No./NINO in an HTML5 pattern attribute使用正则表达式验证 HTML5 模式属性中的 UK National Insurance No./NINO
【发布时间】:2013-07-29 12:08:57
【问题描述】:

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

<input type="text" required="required" pattern="Foo"/>

我一点也不精通正则表达式。谁能解开这个谜题并为我自己和其他人创建一个正则表达式,以便在pattern="#" 属性中使用?

如果有帮助,之前已经有人粗略回答过这个问题:Regular Expression to validate UK National Insurance Number。然而,经过测试,似乎没有一个答案有效。

一点英国国民保险号码信息

格式

数字的格式是两个前缀字母、六个数字和一个后缀字母。

通常使用的示例是AB123456C

通常,数字会印有空格以配对数字,例如:AB 12 34 56 C

道路规则

  • 前两个字母都不能 DFIQUV。第二个字母也不能是O
  • 前缀BGGBNKKNTNNTZZ未分配。
  • 后缀字母为ABCD

【问题讨论】:

  • 您从链接的问题中尝试了谁的答案;似乎“接受”的答案可能不是最好的答案?
  • 实际上所有的答案。我没有发现它们有用。我会记下答案,但不幸的是我没有这样做的要点。
  • 如果您能告诉我jsfiddle.net/Kmk6C 有什么问题,我会尝试解决;这使用了您提到的问题中的一个正则表达式。
  • 有趣的是,这段代码似乎在 jsfiddle 中按预期工作,我今天会在我的构建中尝试它并回复你@adrian-wagg

标签: regex html forms validation client-side


【解决方案1】:

这个应该适合你的需要:

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

Visualization by 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);
&lt;input type="text" placeholder="Ex: AB 12 34 56 D" /&gt; &lt;span&gt;&lt;/span&gt;

【讨论】:

  • 允许每对字符之间有任意数量的空格 (\s*) 的版本:^(?!BG|GB|NK|KN|TN|NT|ZZ)[ABCEGHJ-PRSTW-Z][ABCEGHJ-NPRSTW-Z]\s*\d{2}\s*\d{2}\s*\d{2}\s*[A-D]$
【解决方案2】:

或者试试这个:

^[a-zA-Z]{2}[0-9]{6}[A-Za-z]{1}$

【讨论】:

    【解决方案3】:

    使用 NEST 提供的最新列表,正则表达式应该是(假设没有空格)

    R = new Regex("
    
    (^[AEHKLTYZ]{1}[ABEHK-MPR-TW-Z}{1}
    |^[B]{1}[ABEK-MT]{1}
    |^[C]{1}[ABEHKLR]{1}
    |^[G]{1}[Y]{1}
    |^[J]{1}[A-CEGHJ-NPR-TW-Z]{1}
    |^[M]{1}[AWX]{1}
    |^[N]{1}[ABEHLMPRSW-Z]{1]
    |^[O]{1}[ABEHK-MPRSX]{1}
    |^[P]{1}[A-CEGHJ-NPR-TW-Y]{1}
    |^[R]{1}[ABEHKMPR-TW-Z]{1}
    |^[S]{1}[A-CEGHJ-NPR-TW-Z]{1}
    |^[W]{1}[ABEK-MP]{1})[0-9]{6}[A-DFM]{1}$");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 2015-05-14
      • 2021-05-20
      相关资源
      最近更新 更多