如何使用preg_match正确去除电话号码国家代码 避免误删中间相同数字
正则调整方案
问题原因
现有代码的正则没有限制匹配位置,会全局替换字符串中所有出现的359,所以号码中间的359也被误删了,同时没有覆盖国家代码的所有前缀格式(+、00、+00前缀)。
修正后的正则规则
只匹配字符串开头的国家代码段,正则写为:/^\+?(00)?359/
^强制匹配字符串开头,确保只有前缀的国家代码会被处理\+?匹配可选的开头加号(00)?匹配可选的00前缀359匹配固定的国家代码编号
完整修正代码
<?php $string = '+00359 02 359 10969'; // 先移除所有空格 $string = str_replace(" ", '', $string); // 仅替换开头的国家代码段 $string = preg_replace("/^\+?(00)?359/", '', $string); // 强转int去除城市代码前导0 $string = (int)$string; echo $string;
输出验证
运行上述代码后输出结果为235910969,和预期一致,同时可以覆盖四种国家代码格式的处理:
- 359开头的号码
- +359开头的号码
- 00359开头的号码
- +00359开头的号码
内容的提问来源于stack exchange,提问作者user16462554
相关产品推荐
相关产品推荐

