!preg_match - 非美国电话号码

时间:2013-02-01 11:37:07

标签: php preg-match

在过去,我只需要使用preg_match仅用于美国,例如:

elseif(!preg_match("/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/", $telefon))
    {
        $error = "Your message has not been sent as you did not enter your telephone number, please try again.";
        selected_values();
    }

但我不需要扩展以包含英国和德国的号码。

这些数字通常用[空格]和(括号)格式化。

我尝试了以下成功:

elseif(!preg_match("/^[0-9]$/", $telefon))

任何人都可以帮我一个包含许多不同电话号码的preg_match吗?

感谢

1 个答案:

答案 0 :(得分:0)

对于英国的数字,有一个非常好的答案here。 (不是接受的答案!正如评论所说,这不是一个好的答案)

但如果你试图接受一般的国际号码,你需要对你所接受的内容保持开放 - 除了括号和空格之外,你还可以找到使用加号,点,连字符,斜线的人,等等。

国际电话号码格式有一个公认的标准,如下所示:

+44.1234567890

其中+44是国际拨号代码(本例中为英国),后跟一个点,后跟剩余的数字(减去前导零,如果适用),没有任何其他格式。

当然,如果您需要接受用户输入的数字以及他们使用的任何格式,这无济于事,但如果您将此格式视为目标,则可能会有所帮助 - 即接受用户输入的内容,并尝试将其重新格式化为此标准。

一旦你决定这样做,这个过程就变成了从主号码中删除任何格式的情况。只要数字位数正确,您就不必担心提供的格式。然后只是添加国家代码和点,然后就完成了。