preg_replace格式为剥离前导" 1"和电话号码中不需要的字符?

时间:2012-07-31 21:02:39

标签: php mysql

在我的PHP代码中,我可以使用

从电话号码中删除连字符和括号
preg_replace('/\D+/', "", $cell);

OR

preg_replace('/[ )(.-]/', "", $cell);

两个问题:

(1)上述哪种格式最适合删除所有不需要的字符(, - ,等等,以及字母字符。

(2)如果用户输入,我还需要删除前导“1”(美国国家代码)

3 个答案:

答案 0 :(得分:4)

有很多方法可以删除非数字,但我建议使用对您来说最有意义的方法,也就是说,当您再次查看代码时,哪一种方法看起来最直观,最容易理解。

您的\D工作正常,但添加^1也会替换您正在寻找的领先1

preg_replace('/^1|\D/', "", $cell);

答案 1 :(得分:2)

  1. 我会采用白名单方法:删除所有内容,这不是数字,而是删除列表中的所有内容,

    /[^0-9]/
    

    你的第一个表达式\D也应该这样做。有什么问题吗?如果它有效,请保留它,因为使用第二种(黑名单)方法你绝对会错过角色。不管怎样,或者你的名单必须增长得很大。

  2. 不是真正的答案,但绝对值得一提:国家/地区代码为+X,或00X+实际上只是{{1}的快捷方式因此,删除前导00可能会导致非常丑陋的不受欢迎的行为。必须说,我不确切知道它是如何工作的,但在德国,本地电话号码可以从(理论上)任何号码开始(除{{{ 1}}当然)。这表示在删除不需要的字符(1)之前,您应该注意将1替换为0

答案 2 :(得分:0)

$cell=preg_replace("/[^0-9]/","", $cell);
$cell=preg_replace("/^1/","", $cell);

会这样做吗

相关问题