Php:如何从字符串中删除电话号码?

Php:如何从字符串中删除电话号码?,php,regex,Php,Regex,我正在尝试从我的marketplace网站的用户之间的消息中删除/检测电话号码(想想eBay会做类似的事情) 这是我正在使用的代码: $string = preg_replace('/([0-9]+[\- ]?[0-9]+)/', '', $string); 但是。。。它太咄咄逼人了,它会去掉任何带有2个或更多数字的数字。。。如何设置限制,比如说7个数字 更准确地说,电话号码可以是任何格式,如 3747657654 374-7657654 374-765-7654 (374)765-7654

我正在尝试从我的marketplace网站的用户之间的消息中删除/检测电话号码(想想eBay会做类似的事情) 这是我正在使用的代码:

$string = preg_replace('/([0-9]+[\- ]?[0-9]+)/', '', $string);
但是。。。它太咄咄逼人了,它会去掉任何带有2个或更多数字的数字。。。如何设置限制,比如说7个数字

更准确地说,电话号码可以是任何格式,如

3747657654
374-7657654
374-765-7654
(374)765-7654
etc...(i cannot predict what the users will write depending of their habits)

这取决于具体的要求,因为现在您有1个或多个数字,后跟可选的
-
或空格,后跟1个或多个数字

例如,如果您希望空格前至少有2个数字或
-
后至少有5个数字,您可以使用以下内容:

$string = preg_replace('/([0-9]{2,}[\- ]?[0-9]{5,})/', '', $string);
                                              ^^^^ Here you can specify mininimum / maximum
                               ^^^^ Here you can specify mininimum / maximum

您可以尝试以下方法:

$string = preg_replace('/(?<![0-9]|[0-9]-)[0-9](?:[- ]?[0-9]){6}(?!-?[0-9])/', '', $string);

$string=preg_replace('/(?请尝试以下正则表达式:

/([0-9]+[\-]?[0-9]{6,})/

更改为与您的样本匹配:
如果没有某种上下文智能,就无法确定X位数(其中X是有效的电话号码长度)是电话号码还是其他号码。简单的正则表达式无法确定“3456时呼叫我”和“3456英里时呼叫我”之间的区别

因此,试图用正则表达式捕捉没有任何格式的电话号码(仅仅是直数字)是毫无希望的、纯粹的和简单的。这样做只会阻碍你找到一个可以找到格式/半格式号码的正则表达式。你应该在这里做的是“以最小的误报率获取明显的信息和尽可能多的其他信息……但要认识到我不能全部获取。”

为此,我建议:

/1?[\-]?\(([0-9]{3})\)?[\-]?([0-9]{3})[\-]([0-9]{4})/g

它不应该得到前三个,而应该得到此列表中的所有其他内容:

no-match: 3747657654
no-match: 444444444444444
no-match: 7657654
match:    374-765-7654
match:    1-374-765-7654
match:    (374)765-7654
match:    (374) 765 7654
match:    765-7654
match:    1 (374) 765 7654
match:    1(374)765 7654

如果不知道您试图在中检测电话号码的字符串,我们将帮不上什么忙。请添加一个示例对于你的问题,世界上任何一个由人写的电话号码:7个或更多的数字序列,在西方国家,电话的格式是千方百计的。我无法预测用户会写什么
我无法预测用户会写什么,这取决于他们的习惯
你如何计算出7位数字p之间的差异hone#和7位数货币,例如,
1234567
?在编写代码检测电话号码之前,你必须用英语解释如何定义电话号码。举个例子不是英语定义。是的,但它也会删除任何数字,如时间戳。例如:“嘿,我下午4点到8点见,我的手机是3747657654”