Ruby regex для проверки домена

#ruby #regex #validation

#ruby #регулярное выражение #проверка

Вопрос:

Я ищу регулярное выражение для проверки выбранного домена моего пользователя, т.Е. http://mysite.com/userdomain .

Все, что меня беспокоит, это то, что оно допускает правильные символы.

Комментарии:

1. Ваша терминология немного сбивает с толку. Вы говорите о домене, который является mysite.com часть; но вы также написали userdomain как папку первого уровня, что, по-видимому, указывает на то, что вы, возможно, говорите о допустимых именах папок URL. Что это? Вам нужно проверять «mysite.com «, «mysite.com/userdomain «, или только «userdomain»?

2. Чтобы эта проверка была полезна в реальном мире, вы в конечном итоге захотите узнать, существует ли домен на самом деле. Хотя относительно легко увидеть, синтаксически ли корректен домен, это не скажет вам того, что вам действительно нужно знать, а именно, является ли он пригодным для использования и живым. И для этого вам лучше всего выполнить пинг или попытаться подключиться, и для этого вы, вероятно, захотите использовать реальную схему, такую как ftp или http. Итак, на этом этапе, вероятно, имеет еще больше смысла просто использовать URI или Addressable::URI, как предложил @Bert Goethals. Я сам предпочитаю адресуемый::URI.

3. Я говорю здесь о названии папки

Ответ №1:

Что ж, регулярное выражение во многом поможет вам, но вы можете рассмотреть возможность простого синтаксического анализа URL.

 def validate_url(url)
  uri = URI.parse(url)
  uri.class != URI::HTTP
rescue URI::InvalidURIError
  false
end
  

В качестве альтернативы вместо URI можно использовать адресуемый ::URI (предложено @abe-voelker)

(источник:http://actsasblog.wordpress.com/2006/10/16/url-validation-in-rubyrails /)

Комментарии:

1. спасибо, но на самом деле мне нужно проверить не полный URL, а только выбранный пользователем домен

2. Если вы идете по этому пути, могу ли я предложить вместо этого использовать Addressable::URI, поскольку он лучше поддерживает спецификации RFC и интернационализацию.

3. 1 за синтаксический анализ с использованием установленной библиотеки и … о, я не могу 1 еще раз за предложение адресуемого ::URI.

Ответ №2:

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

Ответ №3:

Просто зайдите в библиотеку регулярных выражений и выберите тот, который вам нравится (ссылка уже указывает на поиск по типу регулярного выражения, которое вы ищете).

Ответ №4:

Вы пытаетесь выяснить, дает ли пользователь вам имя, которое допустимо в качестве папки в URL? ( CGI.escape(some_folder_name) != some_folder_name вероятно, это приведет вас туда, где вам нужно для этого.)


Или вы ищете Regexp.new(Regexp.escape(some_url_string)) ?

Это генерирует регулярное выражение, которое соответствует любому экземпляру some_url_string .

Используется примерно так:

 user.domain = "http://mysite.com/userdomain" # or "mysite.com/userdomain"
incoming_domain = "http://mysite.com/userdomain/a_post"
users_domain_regexp = Regexp.new(Regexp.escape(user.domain))
if incoming_domain =~ users_domain_regexp
   puts "By George, we've done it!"
else
   puts "I'm sorry, but we're prejudiced against that url"
end
#=> "By George, we've done it!"
  

Комментарии:

1. Зачем использовать совпадение регулярных выражений? Совпадение подстрок было бы столь же полезным и с меньшими хлопотами. !!incoming_domain[user.domain] выдаст значение true / false.

2. Я почти уверен, что он на самом деле говорит о папке ‘userdomain’, а не о реальном доменном имени; и он хочет убедиться, что пользователи выбирают имена для этой папки, которые не будут прерываться в URL.

3. Это именно то, о чем я спрашиваю