1

如何验证英国电话号码?我从这个网站复制了答案,但这个答案只接受手机号码。我想同时接受固定电话和手机号码。可能吗?

            # @reference: http://stackoverflow.com/questions/8099177/validating-uk-phone-numbers-in-php

            $telephone = "01752311149"; // not ok.
            $telephone = "07742055388"; // ok.
            $pattern = "/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/";

            if (!preg_match($pattern, $telephone))
            {
                $error = true;
                $message.='<error elementid="telephone" message="invalid" />';
            }

我已经尝试使用下面的这个正则表达式,但它根本不起作用,

#http://stackoverflow.com/questions/14512810/regular-expression-mobile-and-landline-number
$pattern = "/^\(0\d{1,2}\)\d{3}-\d{4}$/";
4

2 回答 2

2

在用于验证和格式化 GB 电话号码的正则表达式中有一系列用于验证电话号码的正则表达式:

或者,RegExLib.com上的一个似乎运行良好:

^((\(44\))( )?|(\(\+44\))( )?|(\+44)( )?|(44)( )?)?((0)|(\(0\)))?( )?(((1[0-9]{3})|(7[1-9]{1}[0-9]{2})|(20)( )?[7-8]{1})( )?([0-9]{3}[ -]?[0-9]{3})|(2[0-9]{2}( )?[0-9]{3}[ -]?[0-9]{4}))$

编辑:

这将允许移动、固定电话和特殊服务号码(999、123 等)——假设空间已被剥离:

'/^(?>(?>\+44|0)(?>(?!7624)(?>[12389]\d|5[56]|7[06])\d{8}|(?>(?>[58]00|1\d{2})\d{6})|(?>8001111|845464\d)|7(?>[45789]\d{8}|624\d{6}))|999|112|100|101|111|116|123|155|118\d{3}|(?>\+44|0)(?>800111|8454647))$/D'

于 2013-03-15T19:47:08.770 回答
1

您最好使用现有的库,而不是尝试自己的验证,因为规则有些复杂并且可能会随着时间而改变。

例如,这个PHP 版本的 Google 的libphonenumber

$phoneUtil = PhoneNumberUtil::getInstance();
try {
    $numberProto = $phoneUtil->parse('02012345678', 'GB');
} catch (NumberParseException $e) {
    echo $e;
}

然后您可以通过以下方式检查号码的有效性:

$phoneUtil->isValidNumber($numberProto);

此外,此库允许您检测电话号码类型(固定线路、移动电话、voip 等)

于 2013-04-13T19:59:09.900 回答