2011-09-14 118 views
0

我創建一個搜索功能。用戶只能使用a-z A-Z和0-9。我如何檢查$ var是否只包含文本或數字,而不是特殊字符?檢查變量是否包含文本或數字

我已經試過這樣的事情:

if (!preg_match('/[^a-z]/i', $search) { 
$error = "error..."; 
} 

如果任何人有一個聰明的解決方案,請讓我知道。它也可能是檢查特殊字符的東西。

+0

看起來不錯 - 爲什麼不'/ [^ A-ZA-Z0-9] /'有關係嗎? –

+0

你不允許有空格嗎? –

+0

應該允許空格 – 2by

回答

2

你幾乎在那裏。只需0-9號碼加入您的正則表達式,像這樣:

if(preg_match('/[^a-z0-9]/i', $search)) 
{ 
    $error = "Error..."; 
} 

/i標誌告訴忽略大小寫的表達,所以不需要字母列表裏面A-Z

在你的原代碼,你要找的任何不是一個字母或數字,同時還要檢查,看看是否preg_match()有沒有匹配任何東西 - 你創建了一個雙重否定。上面的代碼執行if()如果有任何不是一個字母或數字找到。在評論中充分評價@brain。


爲了允許其他字符,簡單地將它們添加到字符的括號內:

if(preg_match('/[^a-z0-9 \.]/i', $search)) 
{ 
    $error = "Error..."; 
} 

此示例允許空間和.(點)。

+0

這個問題唯一的問題是,在這種情況下,如果字符串中存在錯誤字符,preg_match應該返回> 0。所以擺脫「!」。另外,還需要一個「)」。 :-) – brain

+0

嗯,無論我搜索什麼,它都會給我$錯誤 – 2by

+0

啊好吧,它現在可以工作。如果我想添加一些我選擇的特殊字符,我該怎麼做? – 2by

2

事情是這樣的:

if(!preg_match('/^[a-zA-Z0-9]+$/', $search)) { 
    // error 
} 
+0

+ $做什麼? – 2by

+0

[..] +表示好字符必須至少出現一次。 ^和$表示它將匹配整行,而不僅僅是行內的任何地方。基本上。 – brain

相關問題