我有两个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
00584249999999
02129999999
00582129999999 但价值观是这样的:
+584129999999
+582129999999不是。我找不到我犯错误的地方,所以有什么建议吗?
发布于 2014-09-09 13:48:08
替换运算符|的范围比您想象的要大。您的第一个正则表达式分离为
^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}$测试它在regex101.com上直播。
https://stackoverflow.com/questions/25746304
复制相似问题