Javascript 委内瑞拉电话号码的正则表达式与预期不匹配
我有两个正则表达式:Javascript 委内瑞拉电话号码的正则表达式与预期不匹配,javascript,regex,Javascript,Regex,我有两个正则表达式: Local Numbers: /^0058|\+58(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789]))\d{7}$/ Mobile Numbers: /^0058|\+58(?:4(?:1[246]|2[46]))\d{7}$/ 这个想法是为了验证委内瑞拉的电话号码是否添加了该国的前缀。现在,这样的值是有效的: 00584129999999 04129999999 04249999999 00
Local Numbers: /^0058|\+58(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789]))\d{7}$/
Mobile Numbers: /^0058|\+58(?:4(?:1[246]|2[46]))\d{7}$/
这个想法是为了验证委内瑞拉的电话号码是否添加了该国的前缀。现在,这样的值是有效的:
00584129999999
04129999999
04249999999
00584249999999
02129999999
00582129999999
但价值观是这样的:
+584129999999
+582129999999
你不是。我找不到我犯错误的地方,所以有什么建议吗?交替运算符的范围比您想象的要大。你的第一个正则表达式分为
^0058
|
\+58(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789]))\d{7}$
此外,还应允许使用单个0
(而不是强制使用+58
或0058
)
你可能想要像这样的东西
^(?:(?:00|\+)58|0)(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789]))\d{7}$
如果要将两个正则表达式合并为一个正则表达式,没有问题:
^(?:(?:00|\+)58|0)(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789])|4(?:1[246]|2[46]))\d{7}$
测试它。@ReynierPM:当你用本地号码regex测试手机号码时,你期待什么?它应该会失败,是的,它可以工作。我没有注意到我用本地regex测试手机的那一部分,我不好,不管怎样,有没有改变将两个表达式混合在一个中?还是太复杂了?@ReynierPM:没问题(当时我正在开会,所以不能马上回答)。如果你能稍后回答,别担心,我会很乐意为你提供帮助。