首页 > 解决方案 > 如何将电话中的国际部分设为可选

问题描述

我想在正则表达式中使国际代码可选。

<?php
$phone = 'abcd +89-800-123-4567 efgh';
$string = preg_replace("/([\+][0-9]{1,6}-[0-9]{3}-[0-9]{3}-[0-9]{4})/", '<a href="tel:$1" id="phone">$1</a>', $phone);
echo $string;
?>

如果我只尝试 800-123-4567,它也应该可以工作。我使用 ?: 尝试了可选组,但由于某种原因它不起作用。这是我的示例代码

(?:\+?(\d{1,3}))?([0-9]{3}-[0-9]{3}-[0-9]{4})

标签: phppreg-match

解决方案


您错过了可选部分和电话号码其余部分之间的连字符:

(?:\+?\d{1,3}-)?[0-9]{3}-[0-9]{3}-[0-9]{4}
//    here __^

推荐阅读