我試圖寫一個用戶名驗證,具有以下限制:正則表達式來驗證用戶名與至少一個字母和特殊字符
- 必須包含至少1個字母(A-ZA- Z)
- 只能包含數字,字母等什麼,或者強調
下面的例子是有效的:ABC123,MY_NAME,12345a
下面的例子是無效的:123456,my_name !, _1235
我發現了一些關於使用積極lookaheads的字母contraint:(?=。* [a-zA-Z]),它看起來可能有某種負面向前看第二個約束,但我不知道如何將它們混合成一個正則表達式。 (注意......我並不十分清楚這個。*部分在向前看的內容......)
是這樣的:/(?=。* [a-zA-Z])(? !* [^ A-ZA-Z0-9 _])/
編輯:
因爲問題問一個正則表達式,我接受的答案是:
/^[a-zA-Z0-9_]*[a-zA-Z][a-zA-Z0-9_]*$/
然而,我實際上要實施的是Bryan Oakley建議將它分成多個小檢查。這使得在需求變化的情況下將來可以更容易地閱讀和擴展。謝謝大家!
而且因爲我這個標記用的Ruby-on-軌道,我會包括我實際使用的代碼:即解決您的問題
validate :username_format
def username_format
has_one_letter = username =~ /[a-zA-Z]/
all_valid_characters = username =~ /^[a-zA-Z0-9_]+$/
errors.add(:username, "must have at least one letter and contain only letters, digits, or underscores") unless (has_one_letter and all_valid_characters)
end
Sweet,它在第一次測試中缺少_或0以上的有效值,但除此之外,它的工作原理! – Paul 2011-05-23 20:02:37