删除除数字,字母x和加号(正则表达式,PHP)之外的所有内容

时间:2011-09-07 18:37:22

标签: php regex preg-replace

存在这个问题的许多变体,我尝试了一些生成器,但我似乎无法找到与此匹配的正则表达式。假设我的电话号码看起来像“345-324-3243 X039”我想删除除数字,字母x和加号(显示在国际号码中)之外的所有内容。

这是我目前的非工作正则表达式和代码:

$phone = "345-324-3243 X039";
preg_replace('[^\d|x|\+]', '', $phone);

我希望它出来“3453243243X039”,但我得到“30234-2349”。

3 个答案:

答案 0 :(得分:7)

丢失|因为它是字符类中的文字,请确保捕获大写的“X”(以及小写的“x”),使用正则表达式“/ quotes /”(否则它对待是“[引用]”和使用结果

$phone = "345-324-3243 X039";
$phone = preg_replace('/[^\dxX+]/', '', $phone);
// $phone is 3453243243X039

快乐的编码。

答案 1 :(得分:1)

从正则表达式中删除|并转义+

答案 2 :(得分:1)

因此,您不仅会在结果中获得剩余的-个字符,而且会有完全不同的数字?这对我来说很奇怪。仅通过删除字符,您无法从30234-2349获取345-324-3243 X039;该输入中唯一的0就在最后。这几乎就像人物在被删除以及被删除一样。

我注意到你的模式周围没有正则表达式分隔符。我甚至不知道那会产生什么影响,因为我不记得曾经尝试过,但这是你的正则表达式中唯一的功能问题。字符类中的|将被解释为文字|个字符,但这不会影响您发布的示例输入的结果。

我使用的代码是:

$phone = preg_replace('/[^\dx+]/i', '', $phone);

我已将正则表达式包裹在/.../分隔符中,删除了|,未转义为+(在字符类中不应该有任何效果),并将其作为案例 - 对赶上首都X不敏感。