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

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'

于 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 に答える