You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP修改删除HTML中手机号:替代XPath结合正则的方案

PHP处理HTML中手机号的最优方案

采用DOMDocument解析HTML + XPath提取文本节点 + 正则匹配处理的组合方案即可,完美解决XPath不支持直接调用正则的问题,实现逻辑和代码如下:

  • 先通过DOMDocument加载目标HTML内容,用@抑制非标准HTML的解析警告,避免因页面标签不规范导致解析中断,同时加入UTF-8声明避免中文乱码
  • 用XPath的//text()表达式提取所有元素内的文本节点,无需提前指定标签类型,p、span、li等任意标签内的文本都能匹配到
  • 遍历所有文本节点,对每个节点的内容用自定义正则匹配手机号,匹配后直接修改节点值即可实现替换、删除等操作

手机号匹配正则

针对你给出的4种手机号格式,可用以下正则覆盖,可根据实际业务的手机号规则调整匹配位数和格式:

(\(?\d{3}\)?[\s-]?\d?\s?\d{3}[\s-]?\d{4}|\d{10,11}|\d{5}\s\d{4})

可匹配的格式包括:

  • (xxx) xxxx xxxx
  • xxxxxxxxxx/xxxxxxxxxxx(10/11位纯数字手机号)
  • (xxx) x xxx xxxx
  • xxxxx xxxx

代码示例

// 你的待处理HTML内容
$sourceHtml = <<<HTML
<p style="text-align: center;">(123) 4567 8901</p>
<span style="text-align: center;">13812345678</span>
<li style="text-align: center;">(135) 1 234 5678</li>
<p style="text-align: left;">12345 6789</p>
HTML;

// 初始化DOM解析器
$dom = new DOMDocument();
// 加载HTML,抑制不规范标签警告,指定编码避免乱码
@$dom->loadHTML('<?xml encoding="UTF-8">' . $sourceHtml);
$xpath = new DOMXPath($dom);

// 查询所有文本节点
$allTextNodes = $xpath->query('//text()');

// 手机号匹配规则
$phoneReg = '/(\(?\d{3}\)?[\s-]?\d?\s?\d{3}[\s-]?\d{4}|\d{10,11}|\d{5}\s\d{4})/';

// 遍历处理
foreach ($allTextNodes as $textNode) {
    $rawText = $textNode->nodeValue;
    // 要删除手机号就把替换值改成空字符串'',要脱敏就改成'***'或者自定义规则
    $newText = preg_replace($phoneReg, '***', $rawText);
    $textNode->nodeValue = $newText;
}

// 导出处理后的HTML
$processedHtml = $dom->saveHTML();
// 输出/保存处理结果即可
echo $processedHtml;

方案优势

  1. 完全保留原有HTML的标签、样式、属性,不会出现直接对整个HTML字符串做正则替换导致的误改标签内容、破坏页面结构的问题
  2. 适配性高,不管手机号在什么标签里都能匹配到,正则可以随时调整覆盖更多手机号格式
  3. 性能足够应对常规批量HTML处理需求,只要不是单文件超过100M的超大HTML都能稳定运行

内容的提问来源于stack exchange,提问作者Dg2A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:45:00