Проверка для URL / домена с помощью Regex? (Rails) - PullRequest
27 голосов
/ 15 июля 2009

Я пытаюсь создать проверку, которая проверяет, является ли домен / URL действительным, например, "test.com"

def valid_domain_name?
  domain_name = domain.split(".")
  name = /(?:[A-Z0-9\-])+/.match(domain_name[0]).nil?
  tld = /(?:[A-Z]{2}|aero|ag|asia|at|be|biz|ca|cc|cn|com|de|edu|eu|fm|gov|gs|jobs|jp|in|info|me|mil|mobi|museum|ms|name|net|nu|nz|org|tc|tw|tv|uk|us|vg|ws)/.match(domain_name[1]).nil?
  if name == false or tld == false
    errors.add(:domain_name, 'Invalid domain name. Please only use names with letters (A-Z) and numbers (0-9).')
  end
end

Это то, что у меня есть, но оно не работает. Он пропускает плохие URL без сбоев.

Я не очень хорошо знаю регулярные выражения.

Ответы [ 13 ]

0 голосов
/ 09 августа 2015

Это мой валидатор URL, использующий встроенный в Ruby парсер

class UrlValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    p = URI::Parser.new

    valid = begin
      p.parse(value)
      true
    rescue
      false
    end

    unless valid
      record.errors[attribute] << (options[:message] || "is an invalid URL")
    end
  end

end
0 голосов
/ 15 января 2014
^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$

Проверка доменного имени с помощью RegEx

0 голосов
/ 15 июля 2009

Попробуйте настроить шаблон так, чтобы он начинался с ^ (символ «начинается с») и заканчивался $ («заканчивается на»), чтобы весь шаблон читал «строку, начинающуюся с этого, а затем заканчивающуюся» в противном случае совпадение имени, скажем, будет положительным совпадением, если шаблон найден вообще (то есть имеет один единственный правильный символ).

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