validation:只有字母,数字和 –
我想validation我的用户,因此他们只能在用户名中使用az和 – 。
validates_format_of :username, :with => /[az]/
但是这个规则也允许空格._ @
Username should use only letters, numbers, spaces, and .-_@ please.
有任何想法吗?
最好的祝福。 AsbjørnMorell
您可能需要说整个字符串必须匹配:
validates_format_of :username, :with => /^[-az]+$/
如果您不想在开头/结尾处匹配换行符,则可能还需要使用\ A替换^和使用\ Z替换$。 (感谢BaroqueBobcat )
附加i将使其以不区分大小写的方式匹配。 (感谢Omar Qureshi )。
(我最初也离开了+
:感谢Chuck )
更复杂的解决方案,但可重用,并具有更细粒度的错误消息。
自定义validation器:
应用程序/validation/ 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
[]可能包含几个“规则”,因此[a-z0-9]给出小写字母和数字
特殊性格 – 必须在规则的开头
是否
[-a-z0-9@_.]
给你想要的效果?
validates_format_of :username, :with => /^[\w\-@]*$/
注意*,表示’0或更多’
只需更改正则表达式以匹配您的规范所声明的所有字符( \w
涵盖所有字母数字字符 – 字母和数字 – 以及下划线)。
validates_format_of :username, :with => /[\w \.\-@]+/