存在这个问题的许多变体,我尝试了一些生成器,但我似乎无法找到与此匹配的正则表达式。假设我的电话号码看起来像“345-324-3243 X039”我想删除除数字,字母x和加号(显示在国际号码中)之外的所有内容。
这是我目前的非工作正则表达式和代码:
$phone = "345-324-3243 X039";
preg_replace('[^\d|x|\+]', '', $phone);
我希望它出来“3453243243X039”,但我得到“30234-2349”。
答案 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不敏感。