2016-10-27 4 views
2

私はpreg_matchを作っており、7-10桁の数字が可能です。pregの数字とアルファベットの一致

また
preg_match('/[0-9]{7,10}/', $studentID 

スペースとハイフンで20個のアルファベットの最大を可能にする別のpreg_matchコード。

preg_match ('/^[a-zA-Z -]{,20}+$/i', $familyname 

これらはどちらも機能しません。

+0

'/ i'を使用した' a-zA-Z'は冗長です。 '); –

+0

' a-zA-Z'は冗長です。 '/ i'は正規表現の大文字と小文字を区別しませんので、大文字と小文字のバージョンを提供するのは無意味です。 '{、20} +'もあまり意味がありません。 –

答えて

1

あなたが最初の正規表現にあなたは第二のパターンとそれらを使用したのと同じ方法でアンカーを追加する必要がある、とあなたは第二のパターン(例えば、0〜20)で制限数量詞の下限を定義する必要があります。

$studentID = "1234567"; 
if (preg_match('/^[0-9]{7,10}$/', $studentID)) { 
    echo "$studentID matched!\n"; 
} 
$familyname = "Pupkin"; 
if (preg_match ('/^[A-Z -]{0,20}$/i', $familyname)) { 
    echo "$familyname matched!"; 
} 

はパターンが他の消費サブパターン(定量化されたサブパターンのためのバックトラックを無効にするので、必要はありません)と続いていないので{0,20}とその所有{0,20}+版はこちら同じように動作することをPHP demo

注を参照してください。

また、'/^[A-Z -]{0,20}$/i'は、姓のための非常に一般的なサブパターンです。さらに正確にすることをお勧めします。たとえば、すべてのスペースや---------などの文字列を許可しない場合は、'/^(?=.{0,20}$)[A-Z]+(?:[ -][A-Z]+)*$/i'を使用してください。

関連する問題