2012-03-28 157 views
3

好的,所以我希望用戶能夠輸入A-Z中的每個字符以及0-9中的每個數字,但我不希望它們輸入「特殊字符」。PHP - preg_match()

代碼:

if (preg_match("/^[a-zA-Z0-9]$/", $user_name)) { 
    #Stuff 
} 

怎麼可能爲它檢查所有給定的字符,然後檢查是否這些相匹配?我試過preg_match_all(),但我並沒有真正理解它。

就像用戶輸入「FaiL65Mal」一樣,我希望它允許它繼續前進。但是,如果他們進入「故障{]^7(,」我希望它出現一個錯誤

回答

8

你只需要在你的正則表達式量詞:

零個或多個字符*

/^[a-zA-Z0-9]*$/ 

一個或多個字符+

/^[a-zA-Z0-9]+$/ 

你的正則表達式如將只與是字母或數字的一個字符匹配序列Y ou希望以上選項中的一個選項爲零個或多個或一個或多個,具體取決於您是要允許還是拒絕空字符串。

+0

謝謝!我希望他們在我看過的YouTube上的教程時間內解釋這一點。 – MySQL 2012-03-28 23:32:26

1

你的正則表達式需要改變到

/^[a-zA-Z0-9]{1,8}$/ 

對於用戶名1首8個字符之間。只要調整8到相應的數字,也許是1

目前您的表達式匹配一個字符

+0

我不認爲目標是將用戶名限制爲8個字符。 – jordanm 2012-03-28 23:39:12

+0

我剛纔用了8個例子。通常人們對用戶名有上限(因爲它們存儲在數據庫中)。這就是爲什麼我把評論,你可以調整這些值。 – 2012-03-28 23:41:50

0

請保持在月中旬表示,preg_match()preg_*()功能是不可靠的,因爲他們在回報0false就失敗了,所以簡單如果不會拋出錯誤。

考慮使用CleanRegex

if (pattern(('^[a-zA-Z0-9]{1,8}$')->matches($input)) 
{ 
    // Matches! :) 
}