遇到加号(+)时强制匹配国家代码的正则表达式修复咨询
正则调整方案
你当前正则的误匹配根源在于国家码匹配分组末尾带了?修饰符(表示可选),当+后没有符合规则的国家码时,正则会直接跳过国家码分组,从+后的位置开始匹配后续的数字段,导致不符合规则的号码被误识别。
调整后正则
(?:(?:(?:00|\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)|\((?:00|\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\))(?:(?:[-.\s]??\d)|(?:[-.\s]?\(?\d\)?)){4,11}|(?!\+|00)(?:(?:[-.\s]??\d)|(?:[-.\s]?\(?\d\)?)){4,11})
调整逻辑说明
- 拆分两个匹配分支,分别对应带国际前缀的号码和本地号码
- 带国际前缀的分支移除了国家码分组的可选修饰符,强制要求
+/00后必须跟随有效国家码才能完成匹配 - 本地号码分支新增
(?!\+|00)负向预查,禁止号码片段以+或00开头,避免截取带错误前缀的号码部分内容
内容的提问来源于stack exchange,提问作者xyhlon
相关产品推荐
相关产品推荐

