【问题标题】:RegEx to validate National Insurance NumberRegEx 验证国民保险号码
【发布时间】:2014-01-24 14:16:26
【问题描述】:

我正在尝试在 JS 中使用一些 RegEx 来验证国民保险号码。

^(?i:[a-z-[dfiquv]])(?i:[a-z-[dfiquvo]])\d{6}(?i:a|b|c|d)$

这是取自非 JS 的语言,但是如何在 JS 中使用这个规则呢?

我想我应该在这里转义一些字符。

谢谢!

【问题讨论】:

标签: javascript regex validation


【解决方案1】:

你的模式是这样的:

/^[abceghj-prstw-z][abceghj-nprstw-z]\d{6}[abcd]$/i

由于这个原因,原始模式在 javascript 中不起作用:

XRegExp(javascript 正则表达式引擎)不支持字符类减法。因此,[a-z-[dfiquv]] 将被视为:

[a-z-[dfiquv] # a character class that contains:
              #     the character range a-z
              #     -
              #     [
              #     the (duplicate) letters: dfiquv

]             # followed by a literal ]

关于原始模式的另一个通知:XRegExp 不支持非捕获组语法中的内联修饰符:(?i:......) (这是(?:(?i)......) 的快捷方式,请注意javascript 不支持@ 987654327@ 也是,它根本不支持内联修饰符)。由于所有模式似乎都不区分大小写,因此最好的方法是像这样为所有模式添加修饰符:/... pattern .../i 并删除不需要的非捕获组。

【讨论】:

  • 这就是我得到的,关注Wikipedia outline:/^[abceghj-prstw-z][abceghj-nprstw-z]\d{6}[a-d]$/i
  • @Xophmeister:如果维基百科和你同意我的观点,我会买啤酒(加桉树)。
【解决方案2】:

这与 JS 兼容的正则表达式相当接近,只需稍作改动,试试这个:

/^(:[a-z][dfiquv])(:[a-z][dfiquvo])\d{6}(:[abcd])$/i

【讨论】:

  • 我不认为[a-z-[dfiquv]][a-z][dfiquv] 相同:我不熟悉前者的语法,但看起来那个类块只匹配一个字符,而你有两个类,因此必须匹配 2 个字符...我猜 [a-z-[dfiquv]] 的意思类似于 [a-z] but exclude [dfiquv],但我不能肯定地说。
  • 是的,我已要求 OP 提供一些示例。
  • 他的个人资料显示他(和我一样)居住在英国,“国民保险”是英国的东西。 The format is outlined on Wikipedia.
  • 非常感谢,让我检查一下这个 Wiki 页面。
  • 我相信对于 OP 这可能会有所帮助:stackoverflow.com/questions/10204378/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2015-01-19
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多