RegEx验证国民保险号码

时间:2014-01-24 14:16:26

标签: javascript regex validation

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

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

这取自不是JS的语言,但如何在JS中使用此规则?

我认为我应该在这里逃避一些角色。

谢谢!

2 个答案:

答案 0 :(得分:3)

您的模式与此相同:

/^[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没有也不支持(?i),它根本不支持内联修饰符。由于所有模式似乎都不区分大小写,因此最好的方法是将修饰符放在所有模式中:/... pattern .../i并删除不需要的非捕获组。

答案 1 :(得分:1)

这与JS兼容的正则表达式非常接近,只需稍作修改即可尝试:

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