Как правильно настроить эту проверку в моей модели? - PullRequest
1 голос
/ 28 апреля 2011

Когда я проверяю формат строки, я делаю:

validates :link, :uniqueness => true,
               :format => { :with => (regular expression) }

Я хочу, чтобы ссылка была либо видео YouTube на этом регулярном выражении:

/^http:\/\/www\.youtube\.com\/watch\?v=([a-zA-Z0-9_-]*)/

или видео vimeo:

/^http:\/\/www\.vimeo\.com\/(\d+)/

Как настроить проверку в моей модели?

1 Ответ

5 голосов
/ 28 апреля 2011

Вы можете объединить эти два регулярных выражения в одно, хотя я предполагаю, что вы имеете в виду два разных выражения вместо двух идентичных:

validates :link,
  :uniqueness => true,
  :format => {
    :with => %r[http://(?:www\.youtube\.com/watch\?v=(\w+)|www\.vimeo\.com...)]
  }

Использование %r[...] вместо /.../ избавляет вас от необходимости избегать всех слэшей.

Также обратите внимание, что YouTube может использовать домен youtu.be, поэтому вам может понадобиться еще одна часть вашего регулярного выражения. Если эта вещь полностью выходит из-под контроля, вы можете выбрать другой подход и получить список регулярных выражений, с которым вы сравниваете:

VALID_URLS = [
  %r[http://www\.youtube\.com/watch\?v=(\w+)],
  %r[http://www\.youtu\.be/(\w+)],
  %r[ ... ]
]

Затем подтвердите что-то вроде этого:

validates :link,
  :uniqueness => true,
  :format => {
    :with => Regexp.new(VALID_URLS.join('|'))
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...