我尝试在表单字段中验证该输入: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中,它会选择我想要通过的所有常规字符串/空格字符。
这基本上是我第一次接触正则表达式,此时我非常困惑。我花了好几个小时尝试我能想到的每一种方式。如果有人可以帮助我,我将不胜感激。
答案 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/