2014-02-23 87 views
0

我需要用戶名爲a-z0-9的兩個或多個字符,全部爲小寫。這是我使用用戶名正則表達式

USER_REGEX = /\A[a-z0-9][-a-z0-9]{1,19}\z/i 

有了這個正則表達式的正則表達式目前,用戶可以在他們的用戶名使用大寫章程。如何修改當前的正則表達式以避免這種情況?

+2

爲什麼不只是取用戶輸入的用戶名 - 並在保存之前對其進行降級處理? –

+0

我該怎麼做?我只在下面一行寫USER_REGEX.downcase,還是寫一個before_save方法? –

+2

否 - 正則表達式不是用戶名。另外 - 我會在驗證之前執行此操作,以便在您將其降級後仍能得到驗證。 在before_validation中你可以這樣做:「self.username = username.downcase」 –

回答

3

如果你必須保持正則表達式 - 刪除「我」從最終

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/ 

的「我」講述了正則表達式是不區分大小寫的正則表達式。

但你希望它是區分大小寫的,只能匹配小寫字母。

4

的正則表達式過濾兩至20小寫字符或數字是

/^[a-z0-9]{2,20}$/ 

這意味着:

  1. ^在輸入
  2. a-z的前接受小寫'a'到'z'
  3. 0-9接受'0'到'9'
  4. {2,20}[]
  5. $前述直到輸入結束

可以使正則表達式不區分大小寫的尾隨i,如在您的示例接受2至20個元素;這似乎是問題的根源。也就是說,我不知道Ruby對正則表達式的特殊性。