我想验证这些电话号码格式:
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}))$
目前我看不到你的正则表达式在做什么,里面有太多多余的东西。
-
您的组太多
-
你想重复可选字符!?
例如:
-
('+?)+
,你不需要一群人,你不想重复这一点,所以'+?
这就是你想要的。 -
('s?)+
,你想说"0个或更多空格"吗?那么's*
就是你需要的。
-
-
当你写例如
{9,9}
,那么您可以删除一个数字,{9}
相同。 -
您正在嵌套量词,这是您允许太多字符的地方。您有多个地方,您可以在其中执行
([0-9]+){9,9}
,这意味着 1 位或多个数字并重复 9 次。