gpt4 book ai didi

ruby-on-rails - 尝试使用 Regex 验证模型中的字段。适用于 Rubular 但不适用于我的验证

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:02 25 4
gpt4 key购买 nike

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

型号:

class Item < ApplicationRecord
has_many :order_items

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

Controller :

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 中,它匹配特殊字符/整数。

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

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

最佳答案

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

使用

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

匹配 0+ 个字母/空格。将 * 替换为 + 以匹配 1 次或多次出现。

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

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

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

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

关于ruby-on-rails - 尝试使用 Regex 验证模型中的字段。适用于 Rubular 但不适用于我的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41308211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com