正则表达式锚点的 Brakeman 验证不足警告
Brakeman insufficient validation warning of regex anchors
我正在尝试在这样的模型中实施验证。
validates_format_of :field, with: /[0-9]/, message: 'must have at least one number (0-9)'
Brakeman 检测到这是一个 Format Validation
安全问题,它建议在正则表达式之间添加锚点。
Insufficient validation for 'field' using /[0-9]/. Use \A and \z as anchors near line 54
如果我添加这些锚点,正则表达式就会停止工作,所以我不知道在这种情况下该怎么做。这是我使用 rails c
.
进行的测试
"asdf1234".match(/\A[0-9]\z/) # => nil
"foobar1".match(/\A[0-9]\z/) # => nil
在这两种情况下,我都需要方法 return #<MatchData "1">
。
有什么想法吗?
谢谢。
如果你需要匹配一个字符串,里面至少有1个数字,以及前后的任何其他字符,你可以使用
/\A[^0-9]*[0-9].*\z/m
或者只是
/\A.*[0-9].*\z/m
详情
\A
- 字符串开头
[^0-9]*
- 除 ASCII 数字以外的零个或多个字符
[0-9]
- ASCII 数字
.*
- 任何 0+ 个字符,尽可能多,直到
\z
- 字符串结尾。
m
修饰符使 .
匹配任何字符,包括换行符。
实际上,/\A.*[0-9].*\z/m
会慢一点,因为第一个 .*
会一次抓取所有字符串,然后回溯找到最后一个数字。第一个更优化。
我正在尝试在这样的模型中实施验证。
validates_format_of :field, with: /[0-9]/, message: 'must have at least one number (0-9)'
Brakeman 检测到这是一个 Format Validation
安全问题,它建议在正则表达式之间添加锚点。
Insufficient validation for 'field' using /[0-9]/. Use \A and \z as anchors near line 54
如果我添加这些锚点,正则表达式就会停止工作,所以我不知道在这种情况下该怎么做。这是我使用 rails c
.
"asdf1234".match(/\A[0-9]\z/) # => nil
"foobar1".match(/\A[0-9]\z/) # => nil
在这两种情况下,我都需要方法 return #<MatchData "1">
。
有什么想法吗? 谢谢。
如果你需要匹配一个字符串,里面至少有1个数字,以及前后的任何其他字符,你可以使用
/\A[^0-9]*[0-9].*\z/m
或者只是
/\A.*[0-9].*\z/m
详情
\A
- 字符串开头[^0-9]*
- 除 ASCII 数字以外的零个或多个字符[0-9]
- ASCII 数字.*
- 任何 0+ 个字符,尽可能多,直到\z
- 字符串结尾。
m
修饰符使 .
匹配任何字符,包括换行符。
实际上,/\A.*[0-9].*\z/m
会慢一点,因为第一个 .*
会一次抓取所有字符串,然后回溯找到最后一个数字。第一个更优化。