Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка доменного имени при помощи регулярных выражений
 
 автор: dimon4ik   (26.06.2008 в 20:14)   письмо автору
 
 

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

   
 
 автор: Phantom   (26.06.2008 в 20:51)   письмо автору
 
   для: dimon4ik   (26.06.2008 в 20:14)
 

Если в php, то можно проверить функцией gethostbyname() - она возвратит ip-адрес домена, если данный домен существует. Но если нужно проверить только синтаксис, то в доменном имени могут присутствовать a-zA-Z0-9_ , отделённые точкой. Есть ещё русскоязычные доменные имена, состоящие из русских букв. Возможно есть домены и на других языках. Но если мультиязычные домены в рассчёт не брать, то самый простой вариант будет выглядеть так: preg_replace('/[a-z0-9_\.]{4,}/i',$domain)

   
 
 автор: dimon4ik   (26.06.2008 в 21:22)   письмо автору
 
   для: Phantom   (26.06.2008 в 20:51)
 

я пробую вот так :


<?
$stop
='';
$forename='ddik.mysite.biz';

$domain strtolower(trim($forename));
    if (
strlen($domain)<or strlen($domain)>63$stop .= '<li>error </li>';

   if(
ereg("^-|-$",$domain))
   {
      
$stop .= "<li>error</li>";
   }
   if(!
ereg("([a-z]|[A-Z]|[0-9]|-){".strlen($domain)."}",$domain))
   {
      
$stop .= "<li>error 1</li>";
   }
echo 
$stop;
?>


Но получаю ошибку !
что я делаю нетак ?

   
 
 автор: Phantom   (26.06.2008 в 22:13)   письмо автору
 
   для: dimon4ik   (26.06.2008 в 21:22)
 

Ой. Извиняюсь. Я сам ошибку допустил. Якоря забыл и вместо символа "тире" написал "нижний дефис" ;-)
Надо так:


if(preg_replace('/^([a-z0-9\.-]{4,})$/i',$domain)){


}


У тебя вообще код какой-то странный.
1) Зачем динамически размер подставлять в регулярное выражение?
2) Зачем размер до регулярного выражения проверять?

Можно сразу размер указать в регулярном выражении.

3) Само регулярное выражение вообще страшное. Так не делают.

Сделай так:


<? 
$stop
=''
$forename='ddik.mysite.biz'
$domain strtolower(trim($forename)); 
if(!
preg_replace('/^([a-z0-9\.-]{4,64})$/i',$domain)){
$stop "<li>error</li>"
} else {
// всё в порядке, домен введён правильно =)
}
echo 
$stop
?>

   
 
 автор: dima2207   (27.06.2008 в 05:06)   письмо автору
 
   для: Phantom   (26.06.2008 в 22:13)
 

Сделал . и получил :
Warning: Wrong parameter count for preg_replace() in /home/kievhost.biz/data/www/kievhost.biz/5.php on line 107
# error

   
 
 автор: AcidTrash   (26.06.2008 в 22:58)   письмо автору
 
   для: Phantom   (26.06.2008 в 20:51)
 

автор: dimon4ik (26.06.2008 в 20:14) письмо автору
>подскажите рег . выру . что-б проверить правельность введения дом. имени . интересует >синтаксис доменов и поддоменов

автор: Phantom (26.06.2008 в 22:13)
>Если в php, то можно проверить функцией gethostbyname() - она возвратит ip-адрес домена,
И зачем нужен ip, если требуется корректность введеного домена.

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

>самый простой вариант будет >выглядеть так: preg_replace('/[a-z0-9_\.]{4,}/i',$domain)
Полная чушь.


to dimon4ik

<?php
$t
="domain.com";
preg_match("#^[a-z\d_\.-]+\.[a-z]{2,6}$#i"$t) ? print "Правильно" : print " Неправильно";
?>


P.S. нижний пробел (_) если есть домены 3-его уровня и дальше.

   
 
 автор: Phantom   (27.06.2008 в 02:57)   письмо автору
 
   для: AcidTrash   (26.06.2008 в 22:58)
 

Пардон. Ступил конкретно. Не прег_реплэйс, а конечно же прег_матч =)

На счёт "Национальные домены пока еще не приняты.":
http://www.ьфшдюкг.com - как пример.

На счёт "И зачем нужен ip, если требуется корректность введеного домена.":
Это я просто, может пригодится, если не просто на сантаксис нужно проверить домен, а на существование.

На счёт "нижний пробел (_) если есть домены 3-его уровня и дальше.":
Хм, не знал.

   
 
 автор: dima2207   (27.06.2008 в 05:08)   письмо автору
 
   для: AcidTrash   (26.06.2008 в 22:58)
 

а ваш вариант , на любой (даже бредовый домен типа ****////////kkkkkk.mysite.biz ) выдает что все норма .

   
 
 автор: AcidTrash   (27.06.2008 в 09:47)   письмо автору
 
   для: dima2207   (27.06.2008 в 05:08)
 

>даже бредовый домен типа ****////////kkkkkk.mysite.biz
Да что Вы говорите!
Ну попробуйте этот свой домен ****////////kkkkkk.mysite.biz, для меня даже пробовать не надо, изначально видно, что такое не пропустит! Если конечно вы хоть чуток разбираетесь в регулярках.

P.S.
А если уж говорить о тире, точке, нижнего пробела в начале домена, то можно сделать так
<?php
$t
="domain.com";
preg_match("#^[^-\._][a-z\d_\.-]+\.[a-z]{2,6}$#i"$t) ? print "Правильно" : print " Неправильно";
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования