0

在过去,我只被要求对美国唯一的数字使用 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 吗?

谢谢

4

1 回答 1

0

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

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

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

+44.1234567890

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

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

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

于 2013-02-01T11:50:28.863 回答