我想驗證我的用戶,所以他們只能在他們的用戶名中使用a-z和 - 。驗證:只有字母,數字和 -
validates_format_of :username, :with => /[a-z]/
然而,這條規則也允許使用空格._ @
Username should use only letters, numbers, spaces, and [email protected] please.
任何想法?
此致敬禮。 阿斯布喬恩·莫雷爾
我想驗證我的用戶,所以他們只能在他們的用戶名中使用a-z和 - 。驗證:只有字母,數字和 -
validates_format_of :username, :with => /[a-z]/
然而,這條規則也允許使用空格._ @
Username should use only letters, numbers, spaces, and [email protected] please.
任何想法?
此致敬禮。 阿斯布喬恩·莫雷爾
您可能需要說整個字符串必須匹配:
validates_format_of :username, :with => /^[-a-z]+$/
您可能還需要與\ A來代替^和$使用\ Z,如果你不想要匹配的換行符開始/結束。 (感謝BaroqueBobcat)
追加一個我會使它匹配不區分大小寫的方式。 (感謝Omar Qureshi)。
(我最初也不放過+
:感謝Chuck)
簡單地改變正則表達式匹配的所有字符的規範狀態(\w
涵蓋所有字母數字字符 - 字母和數字 - 和下劃線) 。
validates_format_of :username, :with => /[\w \.\[email protected]]+/
validates_format_of :username, :with => /^[\w\[email protected]]*$/
注*,這意味着「0或更多的」
更復雜的解決方案,但可重複使用的,並用更細粒度的錯誤消息。
自定義的驗證:
應用程序/驗證/ username_convention_validator.rb
class UsernameConventionValidator < ActiveModel::EachValidator
def validate_each(record, field, value)
unless value.blank?
record.errors[field] << "is not alphanumeric (letters, numbers, underscores or periods)" unless value =~ /^[[:alnum:]._-]+$/
record.errors[field] << "should start with a letter" unless value[0] =~ /[A-Za-z]/
record.errors[field] << "contains illegal characters" unless value.ascii_only?
end
end
end
(請注意,它允許 - 和犯規讓非ASCII,爲了完整起見, '_')
用法:
應用程序/模型/ user.rb
validates :name,
:presence => true,
:uniqueness => true,
:username_convention => true
這是我想出了:validates_format_of:用戶名:用=>/^ [ - AZ \ d _] + $/ – atmorell 2009-07-17 13:11:50
當你有一個答案解決您的問題,您應該將其標記爲已接受。 – 2016-02-11 00:56:40