0

我想验证这些电话号码格式:

517123123
+48517123123
+48 517 123 123

(48)517123123
(48)517 123 123

517-123-123
48 517-123-123
48/517-123-123

48 517 123 123

我写了这个正则表达式: (\+?)+(((\(([0-9]+){2,2}\)))|(([0-9]+){2,2})?)+(\/?)+(\s?)+(([0-9]+){9,9}|([0-9]+){3,3}(\s|-){1,1}([0-9]+){3,3}(\s|-){1,1}([0-9]+){3,3})

问题是它使大数字8978978979878978967有效。我的错误在哪里?

4

3 回答 3

2

只看正则表达式的结尾,我发现您似乎在多个地方都在做一些事情;

([0-9]+){3,3}

+表示至少有一次 [0-9] 重复,这是一个1111111111111完全有效的匹配。然后,您将其限制为恰好 3 个匹配项,这仍然是一个非常长的数字。如果您想要 3 位数字,请删除+.

于 2013-01-27T18:44:48.423 回答
1

目前我看不到你的正则表达式在做什么,里面有太多多余的东西。

  1. 您的群组过多

  2. 你想重复可选字符!?

    例如:

    • (\+?)+,你不需要一个小组,你也不想重复,所以\+?这里就是你想要的。

    • (\s?)+,你想说“0个或更多空格”吗?然后\s*就是你需要的。

  3. 当你写 eg{9,9}时,你可以去掉一个数字,{9}是一样的。

  4. 您正在嵌套量词,这就是您允许太多字符的地方。你有多个地方,你在哪里([0-9]+){9,9},这意味着 1 个或多个数字并重复 9 次。

于 2013-01-27T18:50:20.047 回答
1

可能是你失去了锚……但是,使用我的正则表达式^(\+?(\(\d{2}\)|(\d{2})|(\d{2}[/ ])))?((\d{3} \d{3} \d{3})|(\d{3}-\d{3}-\d{3})|(\d{9}))$

于 2013-01-27T18:51:15.123 回答