1

有効な電話番号が入力されていることを確認するために、次の正規表現を使用しています。現在、10桁を超える数字が入力されても、エラーのフラグは立てられません。

これはどのように修正できますか?

public function phoneNumber($value) {
    if (preg_match("/^\(?[0-9]{3}\)? *-? *[0-9]{3} *-? *[0-9]{4}$/", $value)) {
        return true;
    }

    return false;
}

有効な電話番号として表示されているはずのないテストケースを次に示します。

35353535355535555555

4

2 に答える 2

5

数値のみに関心がある場合は、他のすべてを除外して結果を確認できます。

public function phoneNumber($value) {
    $filtered = preg_replace("/\D/","",$value);
    return strlen($filtered) == 10;
}
于 2013-03-27T02:24:41.560 に答える
0

外国の番号や拡張子の付いた番号を除外することはお勧めできません。これは、CRMインジェクションの特定の形式の一般的な数値を変換するために使用する例です。スパムスコアリングが含まれます。

<?php
    function phoneNumber($value) {
        $phoneScore = 0;
        $numbers = preg_replace('![^0-9]!','',$value);
        //if it's too small to be a US number, then ramp it up.
        if (!empty($value)&&(strlen($numbers) < 10)){
            $phoneScore = $phoneScore + 3;
        } elseif (empty($value)){
            $phoneScore = $phoneScore + 10;     
        }
        return $phoneScore;
    }

    $numbers = array(
    '(911 -535 -3535',
    '800.555.1212',
    '800  458 2180',
    '800 - 458 2180',
    '800 - 458-2180',
    '',
    '800-555-1212 ext# 212',
    '+49 (0)69 974640',
    '+86 (021) 5466-2808',
    '+66 (02) 261-3525',
    '+44 (020) 7626-0224',
    '123456',
    );

    $patterns = array('![^0-9xX#+]!','!-+!','!-?[xX#]-?!','!#+!','!#!','!^-!');
    $replacements = array("-","-",'#','#',' #','');

    foreach ($numbers as $value){
        $score = phoneNumber($value);
        $clean_num = preg_replace($patterns,$replacements,$value);
        echo "$value = Score $score.<br />\n Cleaned Number = $clean_num<br />\n<br />\n";
    }

?>

出力は次のようになります。

(911 -535-3535=スコア0。クリーニングされた番号=911-535-3535

800.555.1212=スコア0。クリーニングされた番号=800-555-1212

800 4582180=スコア0。クリーニングされた番号=800-458-2180

800-4582180=スコア0。クリーニングされた番号=800-458-2180

800-458-2180=スコア0。クリーニングされた番号=800-458-2180

=スコア10。クリーニングされた数=

800-555-1212 ext#212=スコア0。クリーニングされた番号=800-555-1212#212

+49(0)69974640=スコア0。クリーニングされた番号=+49-0-69-974640

+86(021)5466-2808=スコア0。クリーニングされた番号=+ 86-021-5466-2808

+66(02)261-3525=スコア0。クリーニングされた番号=+ 66-02-261-3525

+44(020)7626-0224=スコア0。クリーニングされた番号=+ 44-020-7626-0224

123456=スコア3。クリーニングされた数=123456

于 2013-03-27T03:16:59.990 に答える