Ruby on rails 使用正则表达式生成自定义验证器..尚未触发

Ruby on rails 使用正则表达式生成自定义验证器..尚未触发,ruby-on-rails,regex,validation,forms,model,Ruby On Rails,Regex,Validation,Forms,Model,嘿,伙计们,我以为这会很简单,但似乎不是……也许我只是把语法写错了 在我的模型中,我正在检查某些关键词 before_validation :deal_validation def deal_validation if self.description.match /(exp\s|expire|ex\s|print|mention|\/)/ errors.add(:description, "Now just a second! You can't use those words

嘿,伙计们,我以为这会很简单,但似乎不是……也许我只是把语法写错了

在我的模型中,我正在检查某些关键词

before_validation :deal_validation

def deal_validation
  if self.description.match /(exp\s|expire|ex\s|print|mention|\/)/ 
    errors.add(:description, "Now just a second! You can't use those words!")
  end    
end
但这似乎并没有阻止模型的保存


我遗漏了什么吗?

我不太懂ruby,但我习惯于测试,你似乎想要:

(\bexpire\b|\bexp?\b|\bprint\b|\bmention\b|\b\/\b)
\b字符与单词边界匹配。如前所述,您的正则表达式将匹配任何带“/”的字符串以及类似“regex”的字符串。这真的是你想要的吗

编辑以使用“?”量词对其进行轻微改进,该量词同时匹配“exp”和“ex”

将其更改为

验证:交易验证


工作

小心:将
\b
放在非单词字符(斜杠)周围意味着只有当斜杠被单词字符直接包围时,它才会匹配,即。E斜杠将在
a/b
中匹配,但在
a/b
//code>中都不会匹配。谢谢,但我的正则表达式仍然有效。调用错误或从未执行验证时,有些东西不起作用。是的-您只是告诉它在验证之前运行函数。这实际上并不影响验证。