【问题标题】:php validate phone numberphp验证电话号码
【发布时间】:2018-10-12 11:20:23
【问题描述】:

我需要有关表单验证的帮助。专门用于澳大利亚电话号码。我只能使用 preg_match() 方法进行基本验证,但我坚持这样做。

必须以 +614、(04) 或 04 开头;然后任何 8 个数字的分组
并且允许使用单个空格。

这是验证标准,感谢任何帮助。

        if (!preg_match("/^[0-9 ]*$/",$name)) {
        $numberErr = "Number format is invalid"
    }

我能做的就这些我不知道如何为数字的开头添加条件(以+614、(04)或04开头。

编辑:还需要信用卡验证方面的帮助,验证标准是:
允许 12 - 19 个数字和单个空格的任何分组。

if(!preg_match('/[0-9]{12}(?:[0-9]{3})?$/', $card)) {
        $cardErr = "Invalid card number";
    }

我找不到任何教 preg_match() 方法参数的东西,所以老实说,我什至不知道上面的代码在做什么。 对不起我的菜鸟;)

【问题讨论】:

  • 让我们看看你的 preg_match 尝试。您的问题需要更多详细信息。在提问之前你有没有看过这个网站上的几十个类似的问题?我不喜欢在没有尝试编码的情况下回答问题,因为这可能会导致该社区/网络中的志愿者滥用。
  • 欢迎,为了提高您在 SO 上的体验,请阅读如何询问On Topic questionQuestion Check listthe perfect question 以及如何创建Minimal, Complete and Verifiable ExampleTAKE THE TOUR 我们非常愿意帮助您修复您的代码,但我们不会为您编写代码
  • @Adnan 我们很乐意帮助您修复损坏的代码。请向我们展示一些损坏的代码。
  • 我知道澳大利亚电话号码是什么样的,但是当您说“任何 8 位以上的数字分组”时
  • @mickmackusa 我认为这意味着最大位数不应超过 12,包括 (+)

标签: php forms validation


【解决方案1】:

我正在使用锚点(^$)以便识别字符串的开头和结尾。前导字符位于第一个非捕获组中,管道表示“或”。第二个非捕获组,包含“空间容忍”的 8 位子字符串。

如果您有任何未妥善处理的附带案例,请告诉我。

代码:(Demo)

$aussie_mobiles = ['+614 1234 5678', '02 11112222', '(04)98765432', '0413572468', '+614 1 2 3 4 5 6 7 8'];

foreach ($aussie_mobiles as $mob) {
    echo "$mob: ";
    if (preg_match('~^(?:\+614|\(04\)|04)(?: *\d){8}$~', $mob)) {
        echo "pass\n";
    } else {
        echo "fail\n";
    }
}

输出:

+614 1234 5678: pass
02 11112222: fail
(04)98765432: pass
0413572468: pass
+614 1 2 3 4 5 6 7 8: pass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多