Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите закончить регулярное выражение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
sandals
Отправлено: 08 Марта, 2013 - 00:10:29
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Февр. 2013  
Откуда: Odessa, UA


Помог: 0 раз(а)




Всем привет! Снова нужна помощь.
С горем пополам написал выражение, которое проверяет совпадение на IP, либо на URL:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. preg_match("/^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}$/", $domain, $match);
  3.  


Теперь мне нужно, чтобы была проверка на совпадение такого вида:
domain.com:port и ip:port (1.1.1.1:12345, либо domain.com:12345)

Также нужно проверить, чтобы порт был не меньше и не равен нулю, и не больше, чем 65535

Думал о варианте:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. list($address, $port) = explode(':', $_POST['address']);
  3.  

но пришел к выводу, что с помощью регулярных выражений это намного лучше.

Почти весь день про регулярные выражения читал, но толком ничего не получается.
 
 Top
esterio
Отправлено: 08 Марта, 2013 - 00:19:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Для домена parse_url
 
 Top
OrmaJever
Отправлено: 08 Марта, 2013 - 00:41:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. '#(
  2. [a-z0-9_.-]+ \. [a-z]{2-4}
  3. |
  4. \d{1,3} \. \d{1,3} \. \d{1,3} \. \d{1,3}\
  5. )
  6. (:\d{1,5})?
  7. #ix'

Побыстрому написал как вариант. А диапазон порта нужно проверить отдельно после регулярки.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
evgenijj
Отправлено: 08 Марта, 2013 - 00:52:58
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. $str1 = '127.0.0.1';
  2. $pattern = '~^((\d{1,3}\.){3}\d{1,3}|([-a-z0-9]+\.)*[-a-z0-9]+\.[a-z]{2,6})$~i';
  3. if (preg_match($pattern, $str1, $matches)) {
  4.     echo 'yes<br/>';
  5. } else {
  6.     echo 'no<br/>';
  7. }
  8. echo '<hr>';
  9. $str2 = 'www.server.com';
  10. if (preg_match($pattern, $str2, $matches)) {
  11.     echo 'yes<br/>';
  12. } else {
  13.     echo 'no<br/>';
  14. }

P.S. Проверка IP -- формальная.

(Отредактировано автором: 08 Марта, 2013 - 01:08:03)

 
 Top
sandals
Отправлено: 08 Марта, 2013 - 15:35:33
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Февр. 2013  
Откуда: Odessa, UA


Помог: 0 раз(а)




Всем спасибо. Решил проблему вот таким способом:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{5}$)|(^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}:\d{5}$)
  3.  


Если есть более лаконичные способы - прошу Закатив глазки .

p.s. очень помог сайт rubular.com

(Отредактировано автором: 08 Марта, 2013 - 16:00:30)

 
 Top
OrmaJever
Отправлено: 08 Марта, 2013 - 15:46:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




sandals пишет:
:\d{5}

это значит что порт может содержать только(!) 5 цифр, тоесть :80 или :8080 не подходит


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
sandals
Отправлено: 08 Марта, 2013 - 15:54:14
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Февр. 2013  
Откуда: Odessa, UA


Помог: 0 раз(а)




OrmaJever пишет:
это значит что порт может содержать только(!) 5 цифр, тоесть :80 или :8080 не подходит

Это сделано специально, т.к. скрипт обрабатывает адреса с портами из пяти цифр. Иначе нужно исправить на {1,5}.

(Отредактировано автором: 08 Марта, 2013 - 16:01:53)

 
 Top
LIME
Отправлено: 08 Марта, 2013 - 16:53:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




вообщето точка это любой символ
если нужна именно точка ее надо экранировать
(Добавление)
и на будущее надо учесть IP6
 
 Top
sandals
Отправлено: 08 Марта, 2013 - 17:50:47
Post Id



Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Февр. 2013  
Откуда: Odessa, UA


Помог: 0 раз(а)




LIME пишет:
вообщето точка это любой символ
если нужна именно точка ее надо экранировать
(Добавление)
и на будущее надо учесть IP6


Спасибо за подсказку! По идее должно быть вот так:

PHP:
скопировать код в буфер обмена
  1.  
  2. (^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{5}$)|(^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}:\d{5}$)
  3.  


http://rubular[dot]com/r/GHJx78Lcmo
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB