我用于测试电话问题的正则表达式


My regex for testing phone issue

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

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这样的大数字有效。我的错误在哪里?

仅查看正则表达式的末尾,我看到您似乎在多个地方正在做的事情;

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

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

可能是

你丢失了锚点....但是,请使用我的正则表达式^('+?('('d{2}')|('d{2})|('d{2}[/ ])))?(('d{3} 'd{3} 'd{3})|('d{3}-'d{3}-'d{3})|('d{9}))$

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

  1. 您的组太多

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

    例如:

    • ('+?)+,你不需要一群人,你不想重复这一点,所以'+?这就是你想要的。

    • ('s?)+,你想说"0个或更多空格"吗?那么's*就是你需要的。

  3. 当你写例如 {9,9},那么您可以删除一个数字,{9}相同。

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