尝试使用Regex验证模型中的字段。在Rubular中工作但不在我的验证中

时间:2016-12-23 21:48:59

标签: ruby-on-rails ruby regex validation model

我尝试在表单字段中验证该输入:item_type不包含特殊字符或数字。

型号:

class Item < ApplicationRecord
  has_many :order_items

  validates_format_of :item_type, :with => /[^A-Za-z\s]/
end

控制器:

def update
  @item = Item.find(params[:id])
  if @item.update_attributes(params_check)
    redirect_to items_path
  else #this is where I can use ActiveRecord errors object?
    redirect_to edit_item_path(@item)
    flash[:error] = "You must enter valid details"
  end
end

此正则表达式仅验证:item_type输入包含特殊字符或整数。在Rubular中,它匹配特殊字符/整数。

如果我删除&#39; ^&#39;制作正则表达式/ [A-Za-z \ s] /,它允许所有输入进入模型。但是,在Rubular中,它会选择我想要通过的所有常规字符串/空格字符。

这基本上是我第一次接触正则表达式,此时我非常困惑。我花了好几个小时尝试我能想到的每一种方式。如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

在Rubular中,/[A-Za-z\s]/只是单独选择每个字母或空格。在您的代码中,您希望确保整个字符串符合模式,而不是逐个单独的char。

使用

/\A[A-Za-z\s]*\z/ 

匹配0+个字母/空格。将*替换为+以匹配一个或多个匹配项。

如果您不想允许使用前导/尾随空格

/\A[A-Za-z]+(?:\s+[A-Za-z]+)*\z/

(这不允许空字符串)如果字母之间的空格只能是单个,请使用

/\A[A-Za-z]+(?:\s[A-Za-z]+)*\z/