首页 > 解决方案 > php验证电话号码

问题描述

我需要表单验证方面的帮助。专门用于澳大利亚电话号码。我只能使用 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() 方法参数的东西,所以老实说,我什至不知道上面的代码在做什么。对不起我的菜鸟;)

标签: phpformsvalidation

解决方案


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

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

代码:(演示

$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

推荐阅读