Почему r-o-r выдает ошибку при попытке осуществить проверку на приемлемость введенной строки?

Вот такая ошибка:
The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?


Хотя в тексте книги и примерах все соответствует рекомендациям авторов:
class Product < ActiveRecord::Base

  validates :description, :title, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)$}i,
    message: 'Must be a valid URL for a gif, png, or jpg..'
  }
end
  • Вопрос задан
  • 2552 просмотра
Решения вопроса 1
@rsludge
Все не совсем так. Ваше регулярное выражение в целом валидно, но для обозначения начала и конца строки ( а не линии внутри строки) следует использовать не ^ и $, а \A и \z. Это настолько частая ошибка, идущая от незнания особенностей регулярок в руби, что в свое время было бурное обсуждение того, что это нужно изменить. В итоге видимо просто добавили в рельсу предупреждение в виде ошибки.
Чтобы понятно было, в чем именно ошибка:
"filename.png\n some other text" будет валидной, хотя не должна.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alekseyasherbondarenko
@alekseyasherbondarenko Автор вопроса
Есть решение - можно просто убрать символ доллара из регулярного выражения проверки валидности.

stackoverflow.com/a/22001759
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы