javascript - 用于验证国民保险号码的正则表达式

标签 javascript regex validation

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

^(?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 正则表达式引擎)不支持字符类减法。因此,[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 并删除不需要的非捕获组。

关于javascript - 用于验证国民保险号码的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334887/

相关文章:

javascript - Javascript 中数字的精确 float 如何工作?

javascript - 文本组件react-native - 如何转义换行符但允许/n通过转义为//n来显示

javascript - HTML5 模式仅允许 5 个逗号分隔的单词而不包含空格

regex - 是否可以使用正则表达式替换来增加数字?

java - Java 中的正则表达式转义序列错误

WPF。使用 MVVM 了解 UserControl 中的错误验证

javascript - 使用 ramda.js 获取嵌套对象数组中某个键的所有值

javascript - Angular 2 - 合并(扩展)对象

java - Spring注入(inject)模拟Bean

php - Laravel 更新模型,具有唯一的属性验证规则