刹车手不足的验证警告正则锚点



我正在尝试在这样的模型中实现验证。

validates_format_of :field, with: /[0-9]/, message: 'must have at least one number (0-9)'

Brakeman检测到此Format Validation安全问题,并建议在正则表达式之间添加锚点。

使用/[0-9]//[0-9]/。使用 a和 z作为第54号线附近的锚点

如果我添加这些锚,则正则表达式停止工作,因此在这种情况下我不知道该怎么办。这是我使用rails c进行的测试。

"asdf1234".match(/A[0-9]z/) # => nil
"foobar1".match(/A[0-9]z/) # => nil

我需要该方法在两种情况下返回#<MatchData "1">

有什么想法吗?谢谢。

如果您需要匹配内部和之后至少有1位数字的字符串,则可以使用

/A[^0-9]*[0-9].*z/m

或只是

/A.*[0-9].*z/m

详细信息

  • A-字符串的开始
  • [^0-9]*-零或更多chars以外的其他字符
  • [0-9]- ac ascii数字
  • .*-尽可能多的0 字符,直到
  • z-字符串的结尾。

m修饰符使.与任何字符匹配,包括线路断路char。

实际上,/A.*[0-9].*z/m会稍慢一些,因为第一个.*将立即抓住所有字符串,然后回溯到最后一个数字。第一个是更优化的。

相关内容

  • 没有找到相关文章

最新更新