php中的白名单

时间:2009-08-10 15:18:13

标签: php user-input whitelist

我为用户输入了他们应输入电话号码的输入。问题是有些人用自己的连字符和空格写下自己的电话号码。我想通过过滤器输入来删除这些东西并仅在我的数据库中存储数字。

我想我可以为空格和特殊字符做一些str_replace()。 但是我认为更好的方法是选择数字而不是删除其他所有数字。我认为我已经听过“白名单”一词。

请您指点我在PHP中解决这个问题的方向?

示例:我希望输入“0333 452-123-4”导致“03334521234”

谢谢!

4 个答案:

答案 0 :(得分:4)

这是一个非常重要的问题,因为有很多口语和地区差异。请参考What is the best way for converting phone numbers into international format (E.164) using Java?它是Java,但适用相同的规则。

我会说,除非你需要更全面的功能,否则请保持简单。创建一个有效的正则表达式列表,并检查每个正则表达式的输入,直到找到匹配项。

如果您希望真的简单,只需删除非数字:

$phone = preg_replace('![^\d]+!', '', $phone);

顺便说一句,根据定义,只是选择数字就像删除其他所有内容一样。如果你的意思不同,你可能想要改写一下。

答案 1 :(得分:1)

$number = filter_var(str_replace(array("+","-"), '', $number), FILTER_SANITIZE_NUMBER_INT);

Filter_Var删除除了优缺点之外的所有内容,并且str_replace可以删除它们。

或者您可以使用preg_replace

$number = preg_replace('/[^0-9]/', '', $number);

答案 2 :(得分:0)

你可以用两种方式做到这一点。遍历字符串中的每个索引,并在其上运行is_numeric(),或者您可以在字符串上使用正则表达式。

答案 3 :(得分:0)

在客户端,我建议使用您在创建表单时设计的一些格式。这适用于拉链或电话领域。看一下这个jquery plugin作为参考。稍后在服务器端会很容易。