4

私は自分の電話番号をチェックするためにこの機能を持っています:

function isValid( $what, $data ) {

        switch( $what ) {

                // validate a phone number
                case 'phone_number':
                        $pattern = "/^[0-9-+]+$/";

                break;



                default:
                        return false;
                break;

        }
        return preg_match($pattern, $data) ? true : false;
}

次の正規表現を受け入れるように変更したい:) ((800)や。のような文字space

したがって、たとえば、この番号は検証に合格しますが、現在は合格していません。

+1(201)223-3213

4

4 に答える 4

8

正規表現を段階的に作成してみましょう。一致する前にスペースがトリミングされることも考慮してください。

  • 最初は+記号がある場合とない場合があります。これもエスケープする必要があります。\+?
  • 次に、括弧付きの部分の前に1つ以上の数字が表示されます。数字が括弧内のグループで直接開始できる場合は、[0-9]+書き込みが必要になる場合があります。[0-9]*
  • 次に、オプションで括弧内に数字のグループがあります(\[0-9]+\)?。そのようなグループが1つだけ許可されているとします。
  • 次に、市内電話番号が表示されます。ハイフンも使用できます。[0-9-]*
  • 最後の文字は数字[0-9]でなければなりません。ここではハイフンは使用できません。

    ^\+?[0-9]+(\([0-9]+\))?[0-9-]*[0-9]$
    

ここで結果を参照してください。スペースのトリミングは次のようになり$trimmed = str_replace(' ', '', $pattern);ます。

于 2012-08-23T09:03:42.330 に答える
4

この正規表現はどうですか?

/^[0-9-+()\s]+$/

ここで実際の動作を確認してください

于 2012-08-23T08:43:42.247 に答える
1
'/\(?\b[0-9]{3}\)?[-. ]?[0-9]{3,5}[-. ]?[0-9]{4,8}\b/'
于 2012-08-23T08:52:48.513 に答える
1

これを検証に使用しているように見えるのでstr_replace('[\s\+\-\(\)]', '', $data)、(電話番号が有効な場合)数字のみを含む必要がある文字列を取得するために使用できます。次に、実行することでこの仮定を簡単にテストできますpreg_match('\d{11}', $data)(つまり、 11桁、許可された範囲がある場合は、{11}このようにmin、maxを使用します)。{min,max}\d{10,11}

+角かっこ、 s、またはsの無効な使用を無視しているという点で、これはLorlinの回答ほど完全ではないことに注意してください-。この2つを組み合わせて使用​​することも、ニーズに最も適したものを使用することもできます。

于 2012-08-23T10:39:11.693 に答える