#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. Это именно то, о чем я спрашиваю