1

「(342)004-1452」のような電話番号をjQueryでマスクします。今、私はこの入力をPHPで検証しようとしています。私は試した

if(!preg_match('\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}', $_POST['tel']))
{
    $errors['tel']='enter a valid phone number';
}

しかし、私のpreg_match式は無効だと思います。このデータを検証するための正しいpreg_match式は何ですか?

4

3 に答える 3

2

あなたはすべてそれを考えすぎています。本当に必要なのは、指定された文字列に適切な数の数字が含まれていることを確認することだけです。

$input = '(342) 004-1452';
$stripped = preg_replace('/[^0-9]/', '', $input);

if( strlen($stripped) != 10 ) {
    printf('%s is not a valid phone number.', $input);
} else {
    printf('%s is a valid phone number. yay.', $input);
}

//output: (342) 004-1452 is a valid phone number. yay.

誰かが入力した文字化けした入力から、電話番号をきれいに復元できます。

$phone_pretty = sprintf('(%s) %s-%s',
    substr($stripped,0,3),
    substr($stripped,3,3),
    substr($stripped,6,4)
    );
于 2012-11-28T22:43:43.537 に答える
1

正規表現に区切り文字がありません。で包む/

'/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/'

警告を表示するように環境を構成した場合は、次の警告が表示されるはずです。

PHP警告:preg_match():区切り文字は英数字または円記号であってはなりません

警告をオンにしていない場合、または意図的にオフにしている場合は、警告をオンに戻すまでPHPコードの開発を停止する必要があります。

于 2012-11-28T22:32:31.997 に答える
1

式は問題ないように見えpreg_match()ますが、引用符内で正規表現の開始と終了に区切り文字を指定する必要があります。

これらのマーカーは通常、スラッシュですが、実際には他の多くの文字にすることができます。

したがって、コード行にスラッシュを追加すると、次のようになります。

if(!preg_match('/\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}/', $_POST['tel']))

文字列を電話番号だけにしたい場合は^、最初と$最後に追加して正規表現を制限することもできます:

if(!preg_match('/^\(?[2-9][0-8][0-9]\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}$/', $_POST['tel']))

それが役立つことを願っています。

(とはいえ、あなたがチェックしている電話番号の形式は、米国および米国のダイヤル プランの国にのみ適用されることを付け加えておきます。ほとんどの国では異なる形式が使用されているため、海外からの訪問者を受け入れたい場合は、多くのこれより緩い正規表現)

于 2012-11-28T22:33:56.033 に答える