奥地利电话号码正则表达式优化需求及现有规则问题
电话号码正则表达式优化方案
现有正则
- 正则1:
(\d{4,12}\/*(\+43)* *(\([0-9]+\))*([ ]*(-|–)*[ ]*[0-9]+)) - 正则2:
([\/ \-\d]*)
允许匹配的号码格式
03852 4637 03852 463728 03852/4637 038524637 03852463728 03852/463728 004338524637 +4338524637 00433852463728 +433852463728 00433852/4637 +4303852/4637 00433852/463728 +433852/463728 01 23457 0123457 01/23457 0043123457 +43 662 8180-0 0662 8180-0 0662 81800 066281800 0662 8180 06628180 0043662 818 00436628180 +43662 8180
禁止匹配的号码
122 133 144 121 911 112 110
需求说明
- 需匹配句子中的电话号码,匹配结果为“Match 1”
- 现有正则
([\/ \-\d]*)可覆盖允许的号码格式,但无法识别+符号,需优化正则以支持+并排除禁止号码
优化后的正则表达式
基础版(覆盖所有允许格式,排除禁止短号)
\b(?!(122|133|144|121|911|112|110)\b)(\+43|0043)?[\d\s\/-]+\b
精确长度版(确保至少包含4位数字,避免匹配无效短串)
\b(?!(122|133|144|121|911|112|110)\b)(\+43|0043)?(?:[\d\s\/-]*\d){4,}\b
正则说明
\b:单词边界,确保匹配完整的电话号码,避免匹配句子中嵌入的数字片段(?!...):负向前瞻,直接排除指定的禁止号码(\+43|0043)?:可选匹配奥地利国际区号,支持+43或0043两种格式[\d\s\/-]+:匹配数字、空格、斜杠、横杠组成的号码主体(?:[\d\s\/-]*\d){4,}:确保号码至少包含4位有效数字,过滤无意义的短分隔符组合
内容的提问来源于stack exchange,提问作者Sneertu
相关产品推荐
相关产品推荐

