我有一个html电话模式,将接受这些格式:
+61 x xxxx xxxx,
+61xxxxxxxxx,
0x xxxx xxxx,
0xxxxxxxxx,
xxxx xxxx,
xxxxxxxx,
+xx xxx xxx xxx,
+xxxxxxxxxxx,
0xxx xxx xxx,
0xxxxxxxxx
几个月前它还能正常工作,现在突然我的电话字段无法验证。
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
4条答案
按热度按时间fjaof16o1#
到目前为止,还没有人愿意指出错误在您的模式中的什么地方。
您错误地插入了一个反斜杠,转义了左括号,因此将其变为普通字符,并保留了右括号
Lone
(遗憾的是,错误消息有些误导,因为这些括号当然不是quantifier brackets
)。xmq68pz92#
与上面的请求类似,我在Visual Studio代码中使用以下RegEx捕获括号中的单词时收到了错误:
\[([^\\[\r\n]*(?:\\.[^\\]\r\n]*)*)\]
(不正确)在文本字符串上(SQL)
但是,在https://regex101.com/r/HGycR9/1中显示的在线正则表达式工具中使用此RegEx模式表明它是有效的RegEx。
正确的RegEx模式是
\[([^[\r\n]*(?:\\.[^\r\n]*)*)\]
,它将突出显示:SELECT d.***[名字]***,d.***[人名]***,d.***[地址1]***,d.***[地址2]***,d.***[城市]***,d.***[邮政编码]从我的表d中选择其中[小时标识]IN(SELECT[HhId]***从其他表)
然后,您可以在VS代码的replace字段中使用
$1
来删除方括号,并保留其中包含的单词。k5hmc34c3#
为了更明确地说明这一点,VSCode(显然还有Visual Studio)与其他Java/ECMAScript正则表达式解释器之间的区别在于,VS产品对匹配括号很挑剔,即使它们应该被解释为文字字符。
例如,下面的正则表达式在大多数基于JS(和PCRE)的正则表达式解释器中完全可以匹配方括号中的字符串:
[string]
.虽然只有"左"方括号被转义,"右"方括号也被解释为一个文本字符。从语义上讲,第一个括号转义后,实际上还没有开始字符类匹配(或者分组或量词,如果匹配的是圆括号
()
或大括号{}
)。在VSCode中,您 * 必须 * 也转义"右"括号,否则您会得到"单独的量词括号"错误。
另一个令人恼火的方面是. NET正则表达式解释器的行为与标准的Javascript解释器非常相似,所以如果开始的括号被转义,它同样不关心转义两个括号。这种性质的东西在. NET或Powershell中很好,但在VSCode中却不一样。
e0uiprwp4#
就是说模式无效。
如果您想匹配来自澳大利亚的手机,您可以用途:
找到模式here。
示例:https://jsfiddle.net