Ruby on rails 尝试使用正则表达式验证模型中的字段。适用于Rubular,但不适用于我的验证

Ruby on rails 尝试使用正则表达式验证模型中的字段。适用于Rubular,但不适用于我的验证,ruby-on-rails,ruby,regex,validation,model,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 此正则表达式仅验证:item_类型输入是否包含特殊字符或整数。在Rubular中,它匹配特殊字符/整数 如果我删除“^”以生成regex/[A-Za-z\s]/,它将允许所有输

我试图验证表单字段中的输入:item_type不包含特殊字符或数字

型号:

class Item < ApplicationRecord
  has_many :order_items

  validates_format_of :item_type, :with => /[^A-Za-z\s]/
end
此正则表达式仅验证:item_类型输入是否包含特殊字符或整数。在Rubular中,它匹配特殊字符/整数

如果我删除“^”以生成regex/[A-Za-z\s]/,它将允许所有输入到模型中。但是,在Rubular中,它选择了所有我希望传递的常规字符串/空格字符


这基本上是我第一次接触正则表达式,现在我很困惑。我已经花了好几个小时去尝试我能想到的每一种方法。如果有人能帮助我,我将不胜感激

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

使用

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

如果不希望允许使用前导/尾随空格

/\A[A-Za-z]+(?:\s+[A-Za-z]+)*\z/
(这不允许使用空字符串)如果字母之间的空格只能是单个,请使用

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

尝试
/\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/