【问题标题】:PHP - Changing Phone Number Format with RegexPHP - 使用正则表达式更改电话号码格式
【发布时间】:2011-09-15 19:50:59
【问题描述】:

我正在尝试弄清楚如何将电话号码转换为格式
+18761234567
进入
876-123-4567
使用替换正则表达式。

【问题讨论】:

  • 这可以在没有正则表达式的情况下完成(如果格式始终为 xxx-xxx-xxxx,则只需使用strstr()
  • @andyb 如果您将preg_replace() 与调用substr() 进行3 次对比,您会发现preg_replace() 更快
  • @James C 我确定是这样,但是性能不是必需的,OP 可能只会这样做一次,如果是这样,我相信正则表达式是矫枉过正的。不过,我并不反对您的解决方案更优雅、更高效!
  • @andyb "regex" 是一个要求;)
  • @James C 哈哈,是的,确实是 - 点了!但是我一直很注意Regular Expressions: Now You Have Two Problems

标签: php regex replace


【解决方案1】:

我认为这应该可行

preg_replace('/^\+1(\d{3})(\d{3})(\d{4})$/i', '$1-$2-$3', '+18761234567');

我假设+1 是常量,然后使用\d 快捷方式来匹配十进制字符。 {} 中的值是要匹配的字符数。

【讨论】:

  • 非常好的正则表达式,因为它不会破坏北美编号系统之外的数字。
【解决方案2】:

此外,互联网上有一个正则表达式库。它可能会有所帮助。

搜索“电话”:

http://www.regexlib.com/Search.aspx?k=phone&c=-1&m=-1&ps=20

【讨论】:

  • 链接已更正。下次请记住,您可以尝试找到该网站并提出修改建议,而不是投反对票 ;-)。
【解决方案3】:

我知道这不是正则表达式,但这也有效:-)

$num = '+18761234567';
$formatted = substr($num, 2, 3).'-'.substr($num, 5, 3).'-'.substr($num, 8);

【讨论】:

    【解决方案4】:

    这假设有 2 个字符 a 开头要忽略。

    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');
    

    【讨论】:

    • 在 a-zA-Z 上匹配也是不对的。您不会在电话号码中找到这些字符!
    • 其实如果是虚号也可以。例如 877-Call-Today
    猜你喜欢
    • 2011-12-14
    • 2019-05-23
    • 2021-01-21
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2014-02-15
    相关资源
    最近更新 更多