【问题标题】:Validating International Phone Numbers in PHP [duplicate]在 PHP 中验证国际电话号码 [重复]
【发布时间】:2011-07-20 14:21:25
【问题描述】:

我一直在寻找几个小时来找到一个为我执行此操作的正则表达式,我发现的所有正则表达式要么需要破折号,要么限制我不需要的其他内容。

喜欢这个: ^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$

基本上我想允许这些类型的电话号码输入,这些都是有效的:

+000 111111111

+00011111111111

0022 111111111111

0022111111111

+333-4444-5555-6666

000-7878787-0000-4587

请注意,位数没有限制,我只希望验证过滤掉空输入和字母表。也过滤掉除了最多 4 个破折号之外的所有其他字符,最多。 4 个空格和一个可选的单加号。

这是否可以通过 preg_match 实现?

感谢任何帮助,谢谢!

【问题讨论】:

标签: php regex forms validation


【解决方案1】:

当然可以。但在我看来,使用不被理解的东西是危险的。我会做这样的事情

^(?!(?:\d*-){5,})(?!(?:\d* ){5,})\+?[\d- ]+$

here on Regexr

最后一部分 \+?[\d- ]+ 允许可选的 + 后跟至少一位数字、破折号或空格

负前瞻确保不超过 4 个破折号或空格。

限制:
- 破折号或空格可以在一行
- 它也接受- 为有效

在 Regexr 链接上自己尝试一下,您可以添加您想要的示例。

【讨论】:

  • 在看到你的答案之前,按照詹姆斯的建议,我这样做了:
  • $numSpaces = preg_match_all('/[ ]/', $phone, $matches); $numDashes = preg_match_all('/[-]/', $phone, $matches); $numPlus = preg_match_all('/[+]/', $phone, $matches); if (!empty ($phone) && (is_numeric($phone))) { if (($numSpaces
【解决方案2】:

去掉想要的字符(“”,“-”),计算数量,然后如果 count

if (countSpace

至于是否为空,只需使用标准表单验证来检查输入是否已填充。

【讨论】:

  • 非常感谢!这实际上帮助我找到了一种方法来做到这一点。
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2010-09-15
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多