簡體   English   中英

PHP:如何驗證英國固定電話和手機號碼?

[英]PHP: How to validate UK landline and mobile numbers?

如何驗證英國電話號碼? 我復制了這個網站的答案,但這個答案只接受手機號碼。 我想接受座機和手機號碼。 可能嗎?

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

有一些正則表達式可用於驗證正常表達式中的電話號碼, 以驗證和格式化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'

您最好使用現有的庫,而不是嘗試自己的驗證,因為規則有些復雜並且可能隨時間而變化。

例如,這個PHP版本的Google的libphonenumber

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

然后你可以用以下方法檢查號碼的有效性:

$phoneUtil->isValidNumber($numberProto);

此外,此庫允許您檢測電話號碼類型(固定電話,移動電話,voip等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM