【发布时间】:2012-02-28 15:52:39
【问题描述】:
我发现了一个用于从文本字符串中删除电话号码的正则表达式模式。它工作得很好,除了几个案例(这些是美国电话号码)。
这是正则表达式:
/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x
以下是我需要捕捉的案例:
- 55555555555(区号+7个数字)
- 155555555555(1+区号+7个号码)
- (555)-5555555(括号中的区号,破折号,7个数字)
- 1-555-555-5555
- 1-(555)-555-5555
这是我正在使用的正则表达式替换:
$pattern = "/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x";
$replacement = "[phone redacted]";
$body = preg_replace($pattern, $replacement, $body);
【问题讨论】:
-
你的例子当然没有涵盖人们试图绕过这个编辑方案的所有方式,所以我希望它真正代表你的数据:)
-
是的,这很难,因为人们在文本区域中输入电话号码是不可预测的。很难说,嗯,55555555是价格,还是电话号码?
-
erg edit:但在这种情况下,我确切地知道正在编辑的文本,所以这里的匹配项应该几乎总是一个电话号码。