2009-05-18 46 views
1

我想在PHP中使用以下正則表達式檢查任何非法字符。基本上,我只想要允許字母數字和下劃線(_)。不幸的是,後面的一段代碼似乎無法正常工作。如果字符串$ username中有任何非法字符,它應該返回true。但是,它仍然允許字符串中的任何字符。任何想法正則表達式有什麼問題?使用正則表達式檢查字符串是否爲非法字符

if (!preg_match("/^[-a-z0-9_]/i", $username)) 
{ 
    return true; 
} 

在此先感謝。

回答

15

您的代碼會檢查第一個字符是否無效。要檢查是否存在任何無效字符,否定你的性格類,而不是函數的返回和刪除錨點:

if (preg_match("/[^-a-z0-9_]/i", $username)) 
{ 
    return true; 
} 

你也,當然,它縮短/[^-\w]/(「字」字符字母,數字和下劃線),如果你不想破折號,甚至只是/\W/

+2

該解決方案比匹配整個字符串的要好,因爲可以的preg_match當它遇到非允許的字符儘快返回true。雖然,與用戶名一樣短的東西並不重要。 – Pianosaurus 2009-05-18 17:10:02

1

您的表情只匹配1個字符。嘗試/^ [ - a-z0-9 _] + $/i'+'匹配多於1個字符,'$'是行尾的錨點

1

您需要將它錨定在最後,而不是僅僅檢查第一個字符。改爲嘗試"/^[-a-z0-9_]*$/i"

0

你沒有一箇中繼器。你需要一個轉發器,如+。據我所知,如果不執行它,你檢查行的開始和一個匹配a-zA-Z0-9和_的字符,但沒有跟隨第一個字符。

2

如果$username只有字母數字和下劃線它將返回TRUE

if (preg_match("/^[a-z0-9_]+$/i", $username)) 
{ 
    return true; 
} 
相關問題