2016-09-02 8 views
0

携帯電話番号を検証する正規表現があります。 数字にはオプションの接頭辞(+234または234または0)が付いています。国際コードまたはゼロ文字の直後には、サービスプロバイダ固有の識別子のセットがあります。これには、交替文字を使用したオプションも指定されています。電話番号の正規表現検証が期待通りに動作しない

私が持っている正規表現に基づいて、この番号は有効ではありません(12349098766543)。正規表現はそれを有効として返します。コード内には909が一致しているようです。しかし、テスト文字列の先頭に1が存在していても、検証に失敗してはいけませんか? ここにある正規表現に何が間違っていますか?

おかげ

function check_number($number) { 
if(!preg_match('/[+234|234|0]?(704|702|803|806|703|706|813|816|810|814|903|802|708|808|812|701|902|809|817|818|909|908|805|705|815|807|811|905)\d{7}$/', $number)) { 
    return 'Invalid Phone Number'; 
}else{ 
    return 'valid Phone Number';} 

}

以下の実行が失敗する必要がありますが、有効として渡されています。

$str = '12349098766543'; 
echo check_number($str); 

答えて

0

誰もがこの同じ問題に遭遇私は他の場所でこの答えを得たので、私は場合にはそれをここに掲示しています:

[234 | 234 | 0]は意味がありません。角括弧は文字のリストを示しますが、私は代わりが必要です:(?:\ +?234 | 0)。読み込み:オプションのプラス記号の後ろに234、または数字0を入力します。

+文字は正規表現のメタ文字であり、エスケープする必要があります。

入力の最初と最後を一致させるには、\ Aと\ zアンカーを使用します。

/\\A(?:\\+?234|0)?(?:704|702|803|806|703|706|813|816|810|814|903|802|708|808|812|701|902|809|817|818|909|908|805|705|815|807|811|905)\\d{7}\\z/ 
関連する問題