2011-12-21 486 views
1

我想只允許一個單獨的字符起訴正則表達式,但它似乎允許通過多個數量。只允許一個字母字符 - 正則表達式

我已經試過這個..

$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

您正在匹配一個字符,但您不匹配只有一個字符。任何至少有一個字母字符的字符串都會傳遞你當前的正則表達式。

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

^表示字符串的開始,並且$表示結束。在這種情況下不需要{1}

您可以選擇在if聲明中檢查strlen($char) == 1

+0

謝謝。我實際上嘗試過,就像我在上面給出的第一個例子那樣,但它不起作用,會在第二個例子中嘗試。 – Brett 2011-12-21 19:30:24

2

你在這裏。您需要使用^來匹配開始和$以匹配您嘗試匹配的字符串的結尾。

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