2012-01-10 56 views
0

我想驗證用戶的用戶名。我希望它能夠有字母和數字,不超過30個字符。尋找一個特定的過濾器PHP

是否有內置的PHP過濾器,能夠爲我做到這一點?這些手動正則表達式的東西傷害了我的大腦...

+0

http://stackoverflow.com/questions/1330693/validate-username-as-alphanumeric-with-underscores – NoName13 2012-01-10 01:25:08

+0

不幸的是,正則表達式是您描述的工作的最佳工具...像http://www.regexbuddy.com /是瞭解它們的好工具!我將用'/^[a-z0-9] {1,30} $/i'作爲最好的正則表達式! – cmbuckley 2012-01-10 01:26:02

+0

LOL ...所有的答案都是完全一樣的想法! – 2012-01-10 01:27:30

回答

2

沒有內置過濾器。

你可能要考慮learning regular expressions,它們不是不好。

$valid = (strlen($username) <= 30 && preg_match("#^[a-z0-9A-Z]+$#", $username)); 
+1

考慮使用正則表達式中的量詞而不是使用'strlen()'。 – FtDRbwLXw6 2012-01-10 02:09:02

0

這有一些具體的事情沒有過濾器,但這個工程並有一個簡單的正則表達式:

function isValidUsername($username) { 
    return (strlen($username) <= 30) && (preg_match("/^[a-z0-9]+$/i", $username) == 1); 
} 
0

這裏是應該這樣做的功能。我建議花一些時間學習正則表達式的工作方式。它們是程序員工具箱中最強大(也是最有用)的工具之一。

更新:運用註釋分隔符的建議之上,並略微簡化我的功能:

更新2:添加了/ d模式修改,以確保$防止對\ n匹配。

function isValidUsername($name) 
{ 
    return preg_match("/^[a-zA-Z0-9]{1,30}$/D", $name); 
} 
0

PHP沒有內置任何內容來滿足這些要求。下面是你需要的正則表達式,但:

$valid = (bool)preg_match('/^[a-zA-Z0-9]{1,30}$/', $username); 

我知道你沒有要求設計批評,但請你想一想,如果硬盤的用戶名是真正的必需品。如果沒有,請考慮使用電子郵件地址,因爲它們更方便用戶,而且無論如何您都可能會向用戶詢問該信息。

+0

所以我會說... if($ _POST ['username'] == $ valid){echo「the username is valid」..。 ..。 。然後它會變成$用戶名? – Depetrify 2012-01-10 01:50:29

+0

@Depetrify:不,如果你想檢查的用戶名是在$ _POST ['username']'中,你可以在上面的代碼中使用它而不是'$ username'。那麼'$ valid'可以是'TRUE'或'FALSE',你可以從那裏開始。 – FtDRbwLXw6 2012-01-10 02:06:30