【问题标题】:Rails, Alphanumeric validation in the controllerRails,控制器中的字母数字验证
【发布时间】:2019-09-08 02:21:54
【问题描述】:

在我的应用中,我让用户选择用户名,就像 twitter 注册页面一样:https://twitter.com/signup

当用户开始输入用户名时,我想实时让用户知道用户名是否可用且有效。

我用来验证用户名是字母数字的正则表达式是:

/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i

给定params[:username]

在控制器中,我如何验证用户名是否为字母数字。注意,我不是在这里保存记录只是验证。所以模型验证不起作用。

想法?谢谢

【问题讨论】:

标签: ruby-on-rails ruby regex ruby-on-rails-3


【解决方案1】:

您仍想使用模型验证。

可能是这样的:

class User
  validates :username, :format => { :with => /your regex/ }, :uniqueness => true
end

# then in some controller action or rack app
def test_username
  user = User.new(:username => params[:username])

  # Call user.valid? to trigger the validations, then test to see if there are 
  # any on username, which is all you're concerned about here.
  #
  # If there are errors, they'd be returned so you can use them in the view,
  # if not, just return success or something.
  #
  if !user.valid? && user.errors[:username].any?     
    render :json => { :success => false, :errors => user.errors[:username] }
  else
    render :json => { :success => true }
  end
end

【讨论】:

  • 谢谢,但这不起作用。错误总是零。您不需要实际保存以恢复错误吗?
  • 抱歉,在第一次迭代中我遗漏了对user.valid? 的调用,这是必要的。我在编辑中添加了它。
  • 非常好。谢谢!有没有办法只恢复第一个错误?
  • 当然,user.errors[:username].first。请注意,使用默认翻译时,错误不会包含属性名称,因此例如“无效”。
【解决方案2】:
r = /^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i

unless your_string.match(r).nil?
  # validation succeeded
end

【讨论】:

    【解决方案3】:

    我认为您的正则表达式有点过于冗长。我实际上会尝试以下正则表达式进行字母数字验证:

    /\A[A-Z0-9]+\z/i
    

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      相关资源
      最近更新 更多