PHP:如何验证英国固定电话和手机号码?

时间:2013-03-15 19:31:12

标签: php regex preg-match

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

            # @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}$/";

2 个答案:

答案 0 :(得分:2)

Regular Expressions for Validating and Formatting GB Telephone Numbers验证电话号码有一系列正则表达式:

或者,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'

答案 1 :(得分:1)

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

例如,Google PHP versionlibphonenumber

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

然后您可以使用以下方法检查号码的有效性:

$phoneUtil->isValidNumber($numberProto);

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