我想了解什麼不對的正則表達式:正則表達式來驗證用戶名
'/^[a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*{4,20}$/i'
我試圖做的是驗證用戶名。允許的字符是字母數字,短劃線,下劃線和點。我想實現的限制是至少有一個字母數字字符,這樣用戶就不會被允許有這樣一個綽號:_-_.
我現在使用的功能是:
function validate($pattern, $string){
return (bool) preg_match($pattern, $string);
}
謝謝。
編輯
正如@mario說,是的,T這裏是*{4,20}
問題。 我試過現在要做的是增加()
但這不是工作作爲例外:
'/^([a-z0-9-_\.]*[a-z0-9]+[a-z0-9-_\.]*){4,20}$/i'
現在「AA - AA」相匹配,但它不匹配「aa--家庭」和'--aa'。 還有其他建議嗎?
編輯
也許有人想否認沒有好看的用戶名,如 「_ .. -a」。 此正則表達式將拒絕有連續的非字母數字字符:
/^(?=.{4,20}$)[a-z0-9]{0,1}([a-z0-9._-][a-z0-9]+)*[a-z0-9.-_]{0,1}$/i
在這種情況下_-this-is-me-_
將不匹配,但_this-is-me_
將匹配。
有一個愉快的一天,並感謝所有:)
你嘗試的東西,如http://regexpal.com調試? – 2011-04-10 01:58:58
感謝您的建議。我會試一試 – s3v3n 2011-04-10 01:59:43
有些人可能會認爲它是一個cop-out,但對於這樣的事情(這很容易表達沒有正則表達式),我個人更喜歡保持從正則表達式清醒。爲什麼不循環遍歷字符,檢查它們是否都是有效字符,並且至少有一個是字母數字? – 2011-04-10 02:03:38