3

在我的 PHP 代码中,我可以通过使用从电话号码中删除连字符和括号

preg_replace('/\D+/', "", $cell);

或者

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

两个问题:

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

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

4

3 回答 3

5

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

您的\D作品很好,但添加也将取代您正在寻找^1的领先地位。1

preg_replace('/^1|\D/', "", $cell);
于 2012-07-31T21:22:02.683 回答
3
  1. 我会采用白名单方法:删除所有不是数字的内容,而不是删除列表a中的所有内容,

    /[^0-9]/
    

    你的第一个表达式\D应该做同样的事情。有什么问题吗?如果它有效,请保留它,因为使用第二种(黑名单)方法,您肯定会错过字符。要么,要么你的名单必须变得相当大。

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

于 2012-07-31T21:08:15.920 回答
0

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

会做

于 2012-07-31T21:20:55.703 回答