红宝石正则表达式匹配

时间:2018-11-19 19:38:27

标签: ruby-on-rails ruby regex activerecord

对于我的ruby on rails项目,我有一个称为message的模型,该模型具有to字段。我想实施通配符搜索,例如,%545将显示所有以545结尾的消息,545%将显示所有以545开始的数字,{ {1}}将显示所有消息,包括%545%

我有一个类似545的查询,其中Message.where("to like ?", str)是要匹配的字符串,例如str ...等

一切正常,但我担心SQL注入攻击。因此,我想对%545, %545%, 545%进行正则表达式匹配,以使其仅允许str和数字通过。因此,我希望传递诸如%之类的字符串,而不传递%545, %545%, 545%之类的字符串。

我已经尝试过abc, %545a, a545%, %54a5%,但这是行不通的。

谢谢。

1 个答案:

答案 0 :(得分:0)

您正确使用了占位符,因此已经免受SQL注入攻击。 Rails将转义该模式中的任何不安全字符;您无需采取任何进一步的措施。

如果您仍然想去除数字和%以外的字符,则可以使用Ruby的String#delete方法:

str.delete('^1-9%')

'^1-9%'自变量的意思是“将不是1的每个字符删除为9%。 (n.b.您不能在这里使用\d,因为#delete无法理解正则表达式元字符。)

请参见https://ruby-doc.org/core-2.5.3/String.html#method-i-delete