我正在尝试使用替换正则表达式将格式为+18761234567的电话号码转换为876-123-4567。
我认为这应该可行
preg_replace('/^\+1(\d{3})(\d{3})(\d{4})$/i', '$1-$2-$3', '+18761234567');
我假设+1
是常数,然后使用\d
快捷方式来匹配十进制字符。在{}
中的值是要匹配的字符数。我知道这不是正则表达式,但这也可以工作 :-)
$num = '+18761234567';
$formatted = substr($num, 2, 3).'-'.substr($num, 5, 3).'-'.substr($num, 8);
这假设在开头有两个字符需要忽略。
preg_replace("/([0-9a-zA-Z+]{2})([0-9a-zA-Z]{3})([0-9a-zA-Z]{3})([0-9a-zA-Z]{4})/", "$2-$3-$4", '+18761234567');
preg_replace()
进行基准测试,并将其与三次调用substr()
进行比较,你会发现preg_replace()
更快。 - James C