Rails - Regex внутри метода, используемого для валидации - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть проверка, которая проверяет формат URL с помощью регулярных выражений. Мне было интересно, если можно поместить регулярное выражение внутри метода:

validates_format_of: имя_таблицы: with => /^(http|https):\/\/[a-z0-9]+([_-.]]1‹[a-z0-9]+) [AZ] {2,5}. (: [0-9] {1,5})? (\ /.) $ / IX

Как поместить это регулярное выражение в метод и использовать его с проверкой?

Ответы [ 4 ]

2 голосов
/ 19 апреля 2011

Если вы хотите привести в порядок код, не создавая пользовательскую проверку, используйте константу, а не метод для хранения регулярного выражения.

class Product < ActiveRecord::Base

  URL_REGEX = /^(http|https):\/\/[a-z0-9]+([\_\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix

  validates_format_of :table_name :with => URL_REGEX

end
1 голос
/ 19 апреля 2011

Он будет работать с любым методом класса или переменной / константой, которая уже определена Но почему бы вам не создать новый валидатор?

# config/initializers/my_validators.rb
ActiveRecord::Base.class_eval do
  def self.validates_url_of(attr_name, n, options={})
    validates_format_of attr_name, :with => /^(http|https):\/\/[a-z0-9]+([_-.]{1}[a-z0-9]+).[a-z]{2,5}(:[0-9]{1,5})?(\/.)?$/ix
  end
end

Тогда:

class Foo < ActiveRecord::Base
  validates_url_of :attribute
end
0 голосов
/ 19 апреля 2011

Я рекомендую вам взглянуть на Ruby - проверить и обновить URL-адрес , чтобы получить гораздо лучший метод проверки, чем регулярное выражение.

Если вы отчаянно хотите использовать Regex, взгляните на эту статью от Джона Грубера , чтобы найти что-то гораздо более ценное, чем приведенное выше.

0 голосов
/ 19 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...