我想验证一个昵称,但我有很多这样的格式:
validates :nickname, presence: true, unniqueness: true, format: { with: /\A[a-zA-Z0-9]+\Z/ }, format: { without: /\s/ }, format: { without: /[!-\/\@\^\~\`\(\)\[\]\>\<\=]/ }
warning: key :format is duplicated and overwritten on line 38
warning: key :format is duplicated and overwritten on line 38
显然不会这样工作,我该如何解决?谢谢
答案 0 :(得分:2)
你的第一个正则表达式涵盖了所有内容:
format: { with: /\A[a-zA-Z0-9]+\Z/ }
但您可能希望\z
而不是\Z
来避免跟踪换行符的问题。匹配/\A[a-zA-Z0-9]+\z/
的任何内容都不会包含任何空格字符,因此/\s/
测试已经涵盖,类似于标点符号测试。
此外,您已将uniqueness
拼错为unniqueness
,因此您也需要修复此问题。
那会让你只是:
validates :nickname, presence: true, uniqueness: true, format: { with: /\A[a-zA-Z0-9]+\Z/ }
如果您确实有多个正则表达式进行测试,那么您可以使用自定义方法执行此操作:
validate :nickname_format
def nickname_format
return if(!nickname) # The `presence: true` takes care of complaining about this.
if(nickname ~! ...)
errors.add(:nickname, 'blah blah')
elsif(...)
...
end
end
这样您就可以单独检查每个正则表达式。