php - 如何将电话中的国际部分设为可选
问题描述
我想在正则表达式中使国际代码可选。
<?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})
解决方案
您错过了可选部分和电话号码其余部分之间的连字符:
(?:\+?\d{1,3}-)?[0-9]{3}-[0-9]{3}-[0-9]{4}
// here __^
推荐阅读
- javascript - 导航时按钮不显示
- c# - 使用 c# 脚本从 HTML 文件中提取数据
- java - Null 值的 Java 标准构建器
- excel - 出于某种原因,MATCH 函数不适用于表头
- flutter - 动态切换滚动物理形式从不滚动滚动
- c++ - 如何在 UML 中以“void*”作为输入来描述成员函数?
- hyperledger-fabric - 有没有办法在超级账本结构 2.0 中将数据从一个链码发送到另一个链码?
- asp.net-core - 在单独的类库而不是 API 项目中配置 Serilog
- reactjs - JSX 是使用 React 的必要条件吗
- angular - Angular 9 问题:无法运行初始应用程序