2017-06-24 8 views
2

私はPHPバージョン7.0.14を使用しています。 stackoverflowのいくつかの良い例にもかかわらず、私は私のPHP正規表現を動作させることができません。私は考えられるあらゆる組み合わせを何時間も試してきました。問題は、エスケープされなければならないピリオドやスラッシュを許可しようとすることにあります。正規表現を二重引用符と一重引用符で囲みてみました。私は2つ、3つ、4つのバックスラッシュでエスケープしようとしました。それはエラーを出すか、すべてのものを($のように)許可するか、ピリオドやスラッシュを許可しません。php - 正規表現で住所を確認する

$strStreet = "123 1/2 S. Main St. Apt. 1"; 
    #$strRegEx = "/^[a-z0-9 ,#-'\/]{3,50}$/i"; 
    $strRegEx = '/^[a-z0-9 ,#-\'\/]{3,50}$/i'; 
    if (preg_match($strRegEx, $strStreet) === 0) { 
    print "bad address"; 
    } 

ご協力いただきありがとうございます。

+0

おかげchris85 ...天才...私はあなたを与えることができます。

デモ(あなたが別の区切り文字を使用している場合もスラッシュをエスケープする必要はありません)クレジット –

+0

おっと...私はちょうど期間がエスケープされていないことに気付きました...なぜそれは "任意の文字"として解釈されていません –

+0

アドレスと正規表現を一緒に使用することはおすすめしませんhttps://smartystreets.com/記事/正規表現の通り住所 – camiblanch

答えて

2

あなたがここに二つの問題があります:あなたの文字クラスには.(文字クラスに.をエスケープする必要はありません)

  • 文字クラス内-をする必要はありません

    1. をエスケープするか、フロントまたはエンドに移動します(他の正規表現エンジンでは、エスケープは利用できません)。それ自身では、それの両側に文字の範囲を作成します。

    ので:

    ^[-a-z0-9 ,#'\/.]{3,50}$ 
    

    はあなたのために働く必要があります。あなたは答えとしてあなたの答えを置く場合https://regex101.com/r/PfZAlO/1/