1

私は、ユーザーが送信した米国の電話番号を検証する機能に取り組んでいます。この電話番号は、ユーザーが通常使用する一般的な番号形式のいずれかで送信できます。これまでの私のコードは次のとおりです。

$number = '123-456-7890';

function validate_telephone_number($number) {
    $formats = array(
        '###-###-####',
        '(###)###-###',
        '(###) ###-###',
        '##########'
    );

    $number = trim(preg_replace('[0-9]', '#', $number));

    if (in_array($number, $formats)) {
        return true;
    } else {
        return false;
    }
}

まず、このコードは機能していないようで、送信されたすべての番号でfalseを返します。エラーが見つからないようです。

次に、特定の許可された市外局番の配列からの電話番号のみを許可する簡単な方法を探しています。何か案は?

4

4 に答える 4

1

最初の質問:

preg_replace('/[0-9]/', '#', $number)

また'/\d/'


2番目の質問については、これが役立つ場合があります。

$areaCode = substr(preg_replace('/[^\d]/', '', $number),0 , 3);

これにより、他のすべての文字を破棄して、番号の最初の 3 桁が得られます。

私は米国の市外局番の形式に精通していないため、これについてこれ以上お手伝いすることはできません。


ボーナス:

if (in_array($number, $formats)) {
    return true;
} else {
    return false;
}

と同等です

return in_array($number, $formats);

実際のところ、フォームのステートメントはすべて

if(<expression>){
    return true;
}
else{
    return false;
}

のように記述できますreturn (bool) <expr>;が、この場合in_arrayは常にブール値を返すため、(bool)必要ありません。

于 2010-11-06T17:30:15.453 に答える
0

多くのコードを維持せずにこれを実行したい場合は、米国の番号を検証し、番号https://www.mashape.com/parsify/formatにいくつかの形式を提供するこのAPIを確認してください。

于 2013-03-04T00:30:06.550 に答える
0

あなたのコードは、適切にフォーマットされているが無効な番号をチェックしません。たとえば、米国では 0 または 1 で始まる市外局番がないため、これをチェックできます。また、この形式では国コードを含めることができません。たとえば、+15551234567 は拒否されます。

フォーマットを気にせず、入力された数字が有効な米国の電話番号かどうかを検証したいだけの場合は、次のようなものを使用できます。

$clean_number = preg_replace("/[^0-9]/", '', $number);
$valid = preg_match("/^(\+?1)?[2-9][0-9]{9}$/", $clean_number);

もちろん、これは "foo 5555555555 bar" も有効な数値として受け入れます。これを許可しない場合は、preg_replace をより制限的にします (たとえば、角かっこ、スペース、およびダッシュのみを削除します)。

于 2010-11-06T17:51:47.330 に答える