首页 > 解决方案 > Rails 中的正则表达式验证

问题描述

我是 rails 新手,我正在尝试注册我的用户名,但不使用特殊字符和空格,但允许使用 - 符号。

Example : 
@@Pierre! => invalid
Pierre-Louis => valid
Pierre Louis => invalid

在 User.rb 文件中,我有:

class User < ApplicationRecord
...
validates :first_name, presence: true, length: {maximum: 25}, format: {with: Regexp.new('[^0-9A-Za-z-]')}
...

我没有任何错误消息,我仍然可以使用特殊字符进行注册。

另外,如果名称未经验证,我想添加一条错误消息。

你有线索吗?

任何帮助将非常感激 !

标签: ruby-on-railsregexvalidation

解决方案


当您使用正则表达式验证格式时,您需要确保匹配正在验证的整个字符串。为了做到这一点,您的正则表达式需要以标记字符串开头和结尾的锚点开头和结尾\A\z

在你的情况下:

validates :first_name, 
  presence: true, 
  length: {maximum: 25}, 
  format: {with: /\A[-0-9A-Za-z]\z'/}
  message: "Custom message"

假设您接受数字、大小写字母和减号。


推荐阅读