无效的正则表达式:单独的量词括号

Eds*_*ejo 2 regex

我有一个可以接受这些格式的 html 电话模式:

+61 x xxxx xxxx,
+61xxxxxxxxx,
0x xxxx xxxx,
0xxxxxxxxx,
xxxx xxxx,
xxxxxxxx,
+xx xxx xxx xxx,
+xxxxxxxxxxx,
0xxx xxx xxx,
0xxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

几个月前它正在工作,现在突然我的电话字段没有验证。我有这个错误:

Pattern attribute value ^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$ is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}|(\d{4}[\s]\d{4})|(\d{8})|(\d{4}[\s]\d{3}[\s]\d{3})|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$/: Lone quantifier brackets 
Run Code Online (Sandbox Code Playgroud)

Arm*_*ali 18

到目前为止,没有人关心显示错误在您的模式中的哪个位置。

…|(\+61\[\s]\d{3}[\s]\d{3}[\s]\d{3})|(\+61\s\d{3}\s\d{3}\s\d{3})$
       ^
Run Code Online (Sandbox Code Playgroud)

您错误地插入了反斜杠,转义了左括号,因此将其设为普通字符并保留了右括号Lone。(遗憾的是,错误消息有些误导,因为这些括号当然不是quantifier brackets。)

  • 这是一个有趣的问题,根据 https://regex101.com/ 或 https://regexr.com/ 等在线工具,这个右括号不应该是字符类之外的特殊字符。我想知道这是否是一个 javascript 错误。 (3认同)
  • 顺便说一句,我现在只能在使用“u”修饰符时重现此错误消息。 (2认同)

nic*_*ank -1

这正是意味着,模式无效。

如果您想匹配来自澳大利亚的手机,您可以使用:

pattern="^(?:0|\(?\+61\)?\s?|0061\s?)[1-79](?:[\.\-\s]?\d\d){4}$"
Run Code Online (Sandbox Code Playgroud)

模式在这里找到。

示例: https: //jsfiddle.net