我正在尝试在这样的模型中实现验证。
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
会稍慢一些,因为第一个.*
将立即抓住所有字符串,然后回溯到最后一个数字。第一个是更优化的。