我想验证我的用户,所以他们只能在他们的用户名中使用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