2012-02-15 18 views
-2

文字列は "S2"で始まり、4桁で始まる必要があります。2文字の正規表現に続いて4桁

一致する文字列は "S20165"です。

私は次のコードを試していますが、5桁または6桁の数字がある場合でも常にエコーします。

$string='S20104'; 
if(preg_match('/S2[0-9]{4}/', $string)){ 
    echo 'OK'; 
} 
else{ 
    echo 'NOT OK'; 
} 
+0

が重複する可能性を終了する必要があります文字列は正規表現パターンと完全に一致しますか?](http://stackoverflow.com/questions/5596346/how-can-i-check-if-a-string-exactly-matches-a-regex-pattern) – mario

答えて

8

あなたはアンカーを使用する必要があります。

/^S2[0-9]{4}$/ 

^は、文字列の先頭と一致して$は、文字列の末尾にマッチするので、これはあなたが完全な文字列だけでなく、部分文字列をチェックしていることを確認します。

[0-9]の代わりに\dを使用することもできます。 PHPでは、 'u' pattern modifierを使用しない限り、preg *関数はUnicode対応ではないため、2つは同等です。

4

問題は、文字列内の任意の場所に試合のためにその時点でpreg_match検索です。

S2123456 
^^^^^^ 
matches 

あなたは^(行の先頭)と$(行の末尾)を使用して正規表現を固定することができます

'/^S2[0-9]{4}$/' 
+0

アンカーは左の文字になります:) – Ryan

+0

おっと!固定のおかげで。 –

0

は、あなたがスタート^を逃しすぎ

/^S2[0-9]{4}$/ 
0
$string='S20104'; 
if(preg_match('/^S2[0-9]{4}$/', $string)){ 
    echo 'OK'; 
} 
else{ 
    echo 'NOT OK'; 
} 
0

を文字列の先頭と末尾にマッチして私がいるかどうかを確認するにはどうすればよい[の$

'/^S2[0-9]{4}$/'