我正在尝试在JS中使用一些RegEx来验证国民保险号码。
^(?i:[a-z-[dfiquv]])(?i:[a-z-[dfiquvo]])\d{6}(?i:a|b|c|d)$
这取自不是JS的语言,但是如何在JS中使用此规则?
我想我应该在这里转义一些字符。
谢谢!
最佳答案
您的模式与此等效:
/^[abceghj-prstw-z][abceghj-nprstw-z]\d{6}[abcd]$/i
出于以下原因,原始模式在javascript中不起作用:
XRegExp(javascript regex引擎)不支持字符类减法。因此,
[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在非捕获组语法中不支持inline修饰符:
(?i:......)
(这是(?:(?i)......)
的快捷方式,请注意javascript也不支持(?i)
,它不支持完全不支持内联修饰符)。由于所有模式似乎都不区分大小写,因此最好的方法是为所有模式放置修饰符,如下所示:/... pattern .../i
并删除未使用的非捕获组。关于javascript - 正则表达式以验证国民保险号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21334887/