Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярное выражение для проверки доменного имени 
V
    Опции темы
fridy
Дата 14.1.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Вот придумал регулярное выражение для проверки правильности формата доменного имени.
Код

m/^\w+-*\w*\.\w+[\.]?\w*[\.]?\w*$/

Хочу узнать мнение сведущих в регулярках людей.
Насколько это надёжный вариант, всё ли я учел?

PM MAIL   Вверх
korob2001
Дата 14.1.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Попробуй применить свой шаблон к такому URL:
http://www.yandex.ru


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Guest
Дата 14.1.2006, 22:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Блин, забыл совсем!

Вот, поправил
Код

m/^(http:\/\/)?(\w\w\w)?(\/)?\w+-*\w*\.\w+[\.]?\w*[\.]?\w*$/


Теперь всё на месте?
  Вверх
fridy
Дата 14.1.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Прошу прощения, забыл назваться, я сегодня с отключенными куками!
PM MAIL   Вверх
korob2001
Дата 15.1.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Ну а как же другие протоколы https, ftp и т.д ?
Попробуй такой вариант:
Код

#!/usr/bin/perl -w
use strict;
my @urls = ( 'http://yandex.ru/catalog/lib/cat.html',
             'www.yahoo.com/search/results/search.php',
             'ftp://filmz.tr.tk/home/toolz/film.avi',
             'http://www.sharereactor.ru/games-catamog/gm.htm',
             '10.0.0.1/jhgdfjhsd/dfuwnbvxc',
             'http://10.0.0.50/jhsdgf/sdfiwe',
             'yahoo.com/jsdgfs/sdfhgsd',
             'https://www.securitylab.net',
             'http://antonium.org/cgi-bin/antonium/guest.pl?mess=1&xs=c5df26a2e5f' );

# Собственно тебя интересует следующая строка.
s/^(.+\..+?)\/(?:.+)?/$1/ for @urls;

print join("\n", @urls);



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
fridy
Дата 15.1.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Это немного не то. Мне это нужно для проверки урлов которые вводятся в форме гостевой.
Поэтому обязательный прямой слеш не нужен и к тому же мне кажется этот шаблон слишком общий.
Я имею ввиду вот это - .+
Такой шаблон допускает и пробелы и строчки типа www.yahoocom тоже проходят.
Добавлено @ 15:19
Я знаю что проверку строки лучше делать перед отправкой формы
на стороне клиента. Это на случай если JavaScript отключен.
PM MAIL   Вверх
korob2001
Дата 16.1.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Хех, ну так ты так и говори, что тебе нужно проверить URL. Я просто думал тебе нужно получить доменное имя из URL.
Тогда попробуй такой код:
Код

#!/usr/bin/perl -w
use strict;
my($protoPattern, $urlWithOutProto) = ();

# Здесь получаешь URL, для прстоты я просто присвоил его статически
my $url = "http://www.securitylab.subdomain.ru/cgi-bin/home.php?sx=a45f52de2f21&s=457812452124";

# В следующей строке укажи через | все допустимые протоколы
$protoPattern = qr/^(?:http|ftp|https):\/\//i;

# Вырезаем из URL протокол и сохраняем изменения в во временной переменной $urlWithOutProto
( $urlWithOutProto = $url ) =~ s/$protoPattern//o;

# Проверяем адрес
if ( $urlWithOutProto =~ /^(?:(?:w{3}\.)?(?:[a-z0-9_-]*?\.){1,2}[a-z]{2,4}(?:\/[a-z0-9_-]*?)*?(?:\.[a-z~]{1,5})?\??(?:[a-z_-]+?=[a-z0-9_\%-]+?)*?(?:\&[a-z]=[a-z0-9_\%-]*)*?)?$/i ) {
     print "URL прошёл проверку\n";
     # Здесь сохраняем $url в базу или файл
} else {
     print "URL завалился на проверке\n";
     # выдаём сообщение об ошибке
}

Данная проверка пропустит такие URL как:

http://www.securitylab.ru/home.php
http://www.securitylab.ru
www.securitylab.ru
securitylab.ru
securitylab.subdomain.ru
www.securitylab.subdomain.ru
http://www.securitylab.subdomain.ru/cgi-bi...;s=457812452124

Ну и разумеется можно так же добавить в шаблон и чего-нить своего, если чего-то на твой взгляд в нём не хватает. Вобщем попробуй с различными адресами. Возникнут сложности, пиши.

Это сообщение отредактировал(а) korob2001 - 16.1.2006, 11:56


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Sadok
Дата 17.1.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 2.11.2004

Репутация: 1
Всего: 2



Код

(?:[^:/?#]+:)?(?://[^/?#]*)?[^?#]*(?:\?[^#]*)?(?:#.*)?


Выдрано из URI::Split
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.