2011-12-21 6 views
1

私は1文字の正規表現を許可しようとしていますが、複数の値を許可しているようです。アルファベット1文字のみを許可する - RegEx

私はこれを試してみました。..

$char = trim($_REQUEST['char']); 

/* Validate char */ 

if (preg_match('/[^a-zA-Z]{1}/', $char)) { 
    $char = 'a'; 
} 

echo $char; 

この..

$char = trim($_REQUEST['char']); 

/* Validate char */ 

if (!preg_match('/[a-zA-Z]{1}/', $char)) { 
    $char = 'a'; 
} 

echo $char; 

しかし、どちらも仕事を。 $_REQUEST['char']aaに等しい場合でも、結果は常に出力されます。

答えて

8

あなたは1文字と一致していますが、と一致していません。は1文字です。少なくとも1つのアルファ文字を含む文字列は、あなたの現在の正規表現を渡します。

if (!preg_match('/^[a-zA-Z]$/', $char)) { 
    $char = 'a'; 
} 

^は、文字列の先頭を示し、$の終了を示します。この場合、{1}の必要はありません。

ifの文でstrlen($char) == 1をチェックすることもできます。

+0

ありがとうございました。私は実際には私が上記の最初の例でそれを試してみましたが、うまくいかなかったので、2番目の例で試してみましょう。 – Brett

2

ここに行きます。始まりと一致させるには^を使い、一致させようとしている文字列の終わりに一致させるには$を使う必要があります。

<? 
$char = "aa"; 
/* Validate char */ 
if (preg_match('/^[a-zA-Z]$/', $char)) { 
    echo "found only ONE char"; 
} else { 
echo "one single char not found" 
} 
?> 
関連する問題