我有这个与大多数电话号码匹配的正则表达式:
^((\+|00)[1-9]{1,3})?(\-| {0,1})?(([\d]{0,3})(\-| {0,1})?([\d]{5,11})){1}$
电话号码很好:
空格,连字符和无空格的组合,如:
现在,我需要两件事:
不允许在数字之间使用多个分隔符。目前,正则表达式允许格式不正确的字符串,例如:
答案 0 :(得分:1)
只是修复你的正则表达式,我可以建议以下正则表达式:
^(?![^ .-]*[ .-]{2})((\+|00)[1-9]{1,3})?[ .-]?((\d{0,3})[ .-]?(\d{5,11}))$
这是demo
<强>说明强>:
^
- 字符串开头(?![^ .-]*[ .-]{2})
- 确保没有后续的分隔符((\+|00)[1-9]{1,3})?
- 前缀+
或00
以及1-9范围内的1或3位数字[ .-]?
- Optinal separator ((\d{0,3})[ .-]?(\d{5,11}))
- 0到3位数后跟一个可选的分隔符,然后是5到11位$
- 字符串结束。如果你没有在这里使用捕获组,只需删除它们或进行非捕获:
^(?![^ .-]*[ .-]{2})(?:(?:\+|00)[1-9]{1,3})?[ .-]?\d{0,3}[ .-]?\d{5,11}$
遵循您的逻辑,我们可以进一步优化此模式
^(?:\+|00)[1-9]{1,3}[. -]?[0-9]{3}[. -]?[0-9]{5,11}$