!preg_match - 非美国电话号码


!preg_match - non US phone numbers

过去,我只需要对美国数字使用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?

谢谢

对于英国的数字,这里有一个很好的答案。(不是公认的答案!正如评论所说,这不是一个好的答案)

但是,如果你想接受一般的国际号码,你需要对你接受的内容持开放态度——除了括号和空格之外,你还可能会发现人们使用加号、点、连字符、斜杠等。

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

+44.1234567890

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

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

一旦您决定这样做,该过程就变成了从主号码中删除任何格式的情况。只要位数正确,您就不需要担心提供的格式。然后只需在国家/地区代码和点前面加上,你就完成了。