Тормозной мастер недостаточно проверяет предупреждение о регулярных выражениях якорей
Я пытаюсь реализовать валидацию в такой модели.
validates_format_of :field, with: /[0-9]/, message: 'must have at least one number (0-9)'
Тормоз обнаруживает это Format Validation
вопрос безопасности, и он рекомендует добавлять якоря между регулярным выражением.
Недостаточная проверка для "поля" с использованием /[0-9]/. Используйте \A и \z в качестве якорей возле линии 54
Если я добавлю эти якоря, регулярное выражение перестанет работать, поэтому я не знаю, что делать в этом случае. Вот тесты, которые я сделал, используя rails c
,
"asdf1234".match(/\A[0-9]\z/) # => nil
"foobar1".match(/\A[0-9]\z/) # => nil
Мне нужно чтобы метод возвращался #<MatchData "1">
в обоих случаях.
Есть идеи? Благодарю.
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
будет немного медленнее, как первый .*
захватит всю строку сразу и затем вернется назад, чтобы найти последнюю цифру. Первый более оптимизирован.