我正在使用以下正则表达式来验证电话号码,并且它通过c#工作正常但是当我尝试在客户端Javascript验证中实现它时它失败并出现错误“意外量词”。我看过几个提到看后面的帖子/看起来像是头脑但是我无法解决问题。
我的正则表达式是:
^\+?([0-9]+[ -]?){5,}[0-9]+$
有谁知道问题是什么?
答案 0 :(得分:6)
尝试加倍反斜杠。如果您从字符串构造正则表达式,\+
将变为+
,在^
之后,它将确实是一个意外的量词。
^\\+?([0-9]+[ -]?){5,}[0-9]+$
答案 1 :(得分:1)
工作,至少它是on regex101.com。我能想到的唯一意想不到的量词是\+
开头。您可能需要双重转义,如下所示:\\+
。一旦得到反斜杠到字符串,再一次为实际逃脱。
反斜杠是常见的转义字符。在这种情况下,它不仅仅是正则表达式中的转义字符,它也是字符串中的转义字符 - 用于表示正则表达式的字符串。
解析该字符串时,会遇到反斜杠。这意味着解析器处于警报状态,以下字符可能是特殊字符 - 对于选项卡的t
或对于换行符的n
。相反,找到了+
,它对字符串解析器没有特殊意义,因此将丢弃转义并将+
放入字符串中。这意味着如果尝试将^\+?([0-9]+[ -]?){5,}[0-9]+$
放入您的字符串中,您的字符串将会包含^+?([0-9]+[ -]?){5,}[0-9]+$
然后将其解析为正则表达式。该解析器看到+
- 一个量词 - 没有任何可量化的东西。因此错误。
现在,如果您尝试将^\\+?([0-9]+[ -]?){5,}[0-9]+$
放入字符串中,则在解析时会遇到反斜杠,这会使解析器处于特殊字符警报状态,之后会发现另一个反斜杠。解析器知道\\
表示“在字符串中添加反斜杠”(正如\t
表示“在字符串中放置一个标签”),并且您的字符串最后为^\+?([0-9]+[ -]?){5,}[0-9]+$
。 />
然后正则表达式解析器完成它的工作,遇到反斜杠并且知道反斜杠意味着下面的特殊字符应该用作文字字符。
但是,正如你在我给出的例子中所看到的那样,它可能不会完全符合你的预期
您匹配可选的+,然后是5次或更多次(一个或多个数字,后跟可选空格或连字符),后跟一个或多个数字。
这意味着它匹配1234 12 12 345-1234 1213
。这真的是你在找什么?