我需要用戶名爲a-z
,0-9
的兩個或多個字符,全部爲小寫。這是我使用用戶名正則表達式
USER_REGEX = /\A[a-z0-9][-a-z0-9]{1,19}\z/i
有了這個正則表達式的正則表達式目前,用戶可以在他們的用戶名使用大寫章程。如何修改當前的正則表達式以避免這種情況?
我需要用戶名爲a-z
,0-9
的兩個或多個字符,全部爲小寫。這是我使用用戶名正則表達式
USER_REGEX = /\A[a-z0-9][-a-z0-9]{1,19}\z/i
有了這個正則表達式的正則表達式目前,用戶可以在他們的用戶名使用大寫章程。如何修改當前的正則表達式以避免這種情況?
如果你必須保持正則表達式 - 刪除「我」從最終
USER_REGEX = /\A[a-z0-9][-a-z0-9]{1,19}\z/i
USER_REGEX = /\A[a-z0-9][-a-z0-9]{1,19}\z/
的「我」講述了正則表達式是不區分大小寫的正則表達式。
但你希望它是區分大小寫的,只能匹配小寫字母。
的正則表達式過濾兩至20小寫字符或數字是
/^[a-z0-9]{2,20}$/
這意味着:
^
在輸入a-z
的前接受小寫'a'到'z'0-9
接受'0'到'9'{2,20}
從[]
塊$
前述直到輸入結束可以使正則表達式不區分大小寫的尾隨i
,如在您的示例接受2至20個元素;這似乎是問題的根源。也就是說,我不知道Ruby對正則表達式的特殊性。
爲什麼不只是取用戶輸入的用戶名 - 並在保存之前對其進行降級處理? –
我該怎麼做?我只在下面一行寫USER_REGEX.downcase,還是寫一個before_save方法? –
否 - 正則表達式不是用戶名。另外 - 我會在驗證之前執行此操作,以便在您將其降級後仍能得到驗證。 在before_validation中你可以這樣做:「self.username = username.downcase」 –