Firefox提示语法错误:无效的正则表达式组。

9

我有几个用于表单验证的正则表达式,注意到我的项目在Firefox中无法访问,什么都没有显示!但是控制台中给出错误信息:SyntaxError: invalid regexp group

nicRegex用于检查国家的身份证号码。格式应为937962723V937962723X或任何11位数字,根据当前格式提示。

phoneRegex用于检查带有国家代码的电话号码。941212121210762323232

const nicRegex = /^(?:19|20)?\d{2}(?:[01235678]\d\d(?<!(?:000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)))\d{4}(?:[vVxX])$/;


你可以在控制台中尝试每一个,找出哪个是错误的。 - derpirscher
你至少应该知道哪个正则表达式有问题。这将由附加到错误的行号表示。 - Mitya
它没有给出任何特定的行号,但是bundle.js:1:34。 - Hasini Silva
2
nicRegex 包含一个 负向先行断言 - 这在 FF 中不被支持。 - Alex K.
1
你需要重写它,以便不需要使用一个。实际上,你要做到这一点的方式取决于你尝试验证的格式的规则。另请参见https://dev59.com/XnRB5IYBdhLWcg3wXmVI。 - Alex K.
显示剩余4条评论
2个回答

9

简而言之:谨慎使用命名捕获组(或者干脆不用)

我曾尝试在我的正则表达式中使用命名捕获组,因为我觉得这样很聪明……但是 Firefox 惩罚了我。

不起作用: /(?<text>[a-z]+)/

起作用: /([a-z]+)/


5
使用负回顾后断言(Safari目前不支持)来限制前三位数字。同样可以使用负向前瞻来进行限制,只不过需要将其放置在3位数字模式之前
(?:[0-35-8]\d\d(?<!(?:000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)))

应该看起来像。
(?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d

请注意,这里的非捕获组是多余的,我已经将它们删除,并且[01235678] = [0-35-8]
最终的正则表达式如下:
/^(?:19|20)?\d{2}(?!000|500|36[7-9]|3[7-9]\d|86[7-9]|8[7-9]\d)[0-35-8]\d\d\d{4}[vVxX]$/

请查看正则表达式演示Regulex图形

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接