1

我为用户输入了他们应该输入电话号码的输入。问题是有些人用连字符和空格写他们的电话号码。我想通过过滤器输入输入以删除此类内容并仅在我的数据库中存储数字。

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

你能指点我在PHP中解决这个问题的方向吗?

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

谢谢!

4

4 回答 4

5

这是一个重要的问题,因为有很多俗语和地区差异。请参阅使用 Java 将电话号码转换为国际格式 (E.164) 的最佳方法是什么?它是 Java,但适用相同的规则。

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

如果你想要它非常简单,只需删除非数字:

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

顺便说一句,根据定义,仅选择数字与删除其他所有内容相同。如果您的意思有所不同,则可能需要重新措辞。

于 2009-08-10T15:21:46.863 回答
1
$number = filter_var(str_replace(array("+","-"), '', $number), FILTER_SANITIZE_NUMBER_INT);

Filter_Var删除除优点和缺点之外的所有内容,并且 str_replace 摆脱了这些。

或者你可以使用 preg_replace

$number = preg_replace('/[^0-9]/', '', $number);
于 2009-08-10T15:22:19.763 回答
0

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

于 2009-08-10T15:23:01.243 回答
0

在客户端,我确实建议使用您在创建表单时设计的一些格式。这适用于邮编或电话领域。看看这个 jquery插件作为参考。稍后在服务器端会容易得多。

于 2009-08-10T15:42:00.550 回答