preg_match表达电话号码

时间:2013-12-09 18:12:34

标签: php regex preg-match phone-number

如果数字与带有连字符,加号,空格或括号的任何数字都不匹配,我想显示错误消息。没有数字。

例如:

(012) 123 4567
(012)-123-4567
012-345-6789
123 123 1234
+12 23 213 3456

以上示例均适用于此表达式:

if (!preg_match("/^[0-9\-]|[\+0-9]|[0-9\s]|[0-9()]*$/", $_POST['tel'])) {
    $telErr = "Invalid contact number";
}

但它允许我不想要的信件。

示例:

+00000000a

上面的例子被我所拥有的表达所接受。

请有人帮我这个。

5 个答案:

答案 0 :(得分:1)

此表达式将接受+ 5number,5number

"'^(([\+]([\d]{2,}))([0-9\.\-\/\s]{5,})|([0-9\.\-\/\s]{5,}))*$'"

答案 1 :(得分:0)

更好的正则表达式是:

"/^[\+0-9\-\(\)\s]*$/"

答案 2 :(得分:0)

我首先清理一下字符串(避免无用的匹配):

$input = preg_replace('/[^0-9+\(\)-]/', '', $_POST['tel']);

我匹配美国数字+1(xxx)xxx-xxxx;

if(preg_match('/^(\+1|001)?\(?([0-9]{3})\)?([ .-]?)([0-9]{3})([ .-]?)([0-9]{4})/',$input))
        $result = "match: USA";

else    $result = "no match";

这允许相当多的输入配置 - 只有你的最后一个数字不匹配(如果我不首先进行清理,不是因为匹配的国际代码,而是因为区域中的分割 - 代码)所有其他人也没有清理。

答案 3 :(得分:0)

在我看来,您想表达的是以下内容:

\+{0,1}\({0,1}[0-9]{0,3}\){0,1}[ -]{0,1}[0-9]{0,4}[ -]{0,1}[0-9]{0,4}[ -]{0,1}[0-9]{0,4}

可以简化为:

(\+?\(?[0-9]{2,3}\)?)([ -]?[0-9]{2,4}){3}

可以这样写:

\+?                  //matches existence of +
\(?                  //matches existence of (
[0-9]{2,3}           //matches 2 to 3 numbers
\)?                  //matches existence of )
([ -]?[0-9]{2,4}){3} //matches a space or a dash with 2 to 4 numbers, 3 times.

这将最多为您提供3 + 4 * 3 = 15个数字,电话变量不带空格。

但是我认为最好的方法是修剪输入,然后计算输入的长度。

在RegEx中,总是有一个完美的匹配答案,但这并不总是意味着使用它是一个好主意。维护起来可能太复杂,也很难理解。

答案 4 :(得分:0)

西班牙 - 西班牙

preg_match("/^(\+34|0034|34)?[6|7|9][0-9]{8}$/", $phone);

葡萄牙 - 太平洋

preg_match("/^(\+351|00351|351)?[2|9][0-9]{8}$/", $phone);

安道尔 - 广告

preg_match("/^(\+376|00376|376)?[0-9]{6}$/", $phone);

直布罗陀 - GI

preg_match("/^(\+350|00350|350)?[0-9]{8}$/", $phone);

-- 拥有所有国家/地区列表会很棒