preg_match

Dareczek

Новичок
Ну, домен ssss..... пройдет валидацию и что, сайт сломается?
Я спросил
можете написать регулярное выражение которое провеьяет допустим .ru сайты. Но так чтобы не попали допустим www.ru (т.е без доменного имени) и такие как www.sub.domain.ru тоже чтобы не попали
. Раз спросил значит надо чтобы такие ssss.... не прошли валидацию.
 

DiMA

php.spb.ru
Команда форума
В каком смысле ни о чем? Где в моем сообщении ошибка? Пиши конкретно, с цитатой и опровержением. В топике написано много фигни во время ответа начинающему. Я утверждаю, что 99% фигни не нужно, ее нужно заменить на короткое и лаконичное "a-z0-9.-". Заодно это поможет и нубам, и тебе запомнить RFC по допустимым символам. И разумеется, на требования RFC, что домен нельзя начинать с дефиса, не может быть 2 точки подряд и т.д. - нужно забить (либо иметь обоснование на более строгую проверку). Особенно важно срочно выкинуть из головы дурь с проверкой "www" в имени домена.

В далеких 96-97 годах я как-то в инете увидел ссылку типа www2.citforum.ru. И еще в журналах до того читал про некий "Интернет-2" (конечно, ничего не поняв). Я подумал, что это ссылка из некого магического второго интернета и что в него можно попасть, просто введя правильную ссылку! =) Те, кто пишут ввв в регах - видимо так же до сих пор думают. А еще когда-то существовал домен, нарушающий RFC по длине букв - i.am. У меня там была клевая бесплатная почта [email protected] и http://i.am/dima. Увы, лавочку прикрыли давно.
 

DiMA

php.spb.ru
Команда форума
Я спросил . Раз спросил значит надо чтобы такие ssss.... не прошли валидацию.
уровень нубизма зашкаливает... неужели ты не понимаешь, что в остальных регах этот пример тоже прокатит?

Кому надо, что бы "это" не прошло валидацию? Чем грозит? Взломом сайта? Пример в студию. Что значит "чтобы такие"? Дай формальное определение термина, какие домены "такие", а какие "не такие".
 

domencom

Новичок
В каком смысле ни о чем? Где в моем сообщении ошибка?
Ну так вы же сами ответили на вопрос:
И разумеется, на требования RFC, что домен нельзя начинать с дефиса, не может быть 2 точки подряд и т.д. - нужно забить (либо иметь обоснование на более строгую проверку)
 

DiMA

php.spb.ru
Команда форума
Чето вы гоните. Я написал 5 пунктов. Если кто видит ошибку или имеет другое обоснованное мнение - в студию. Я сам на свои вопросы не отвечаю .-) Пишу еще 6й пункт, раз все такие умные.

6. Все ваши убогие реги дырявые, включая мой ответ. Я что-то сразу не заметил, в силу очевидности. Все дыряво, как и 99% сайтов в инете. Т.е. я могу засунуть в приведенные примеры любой трешь, рега проверки домена схавает и вернет true. Вместо поста фигни, лучше нубам акцентировать внимание на этом пункте, понять его и далее пойти переписать ВЕСЬ свой старый дырявый код с регами.
 

hell0w0rd

Продвинутый новичок
Можно еще воспользоваться функцией http://www.php.net/manual/ru/function.filter-var.php
Да, там тоже дырявый регэксп, но на сколько я помню RFC-шный длиннющий тоже дырявый...
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html - вот для мыла, но там тоже какие-то косяки есть.
ТС, если хочешь изучить регулярки - советую написать какой нибудь парсер чего либо. Скилы прокачаешь, и потом можешь написать регулярочку для сайта, но она все равно не будет полноценной, как сказали выше
 

domencom

Новичок
DiMA, та ладно, что вы так взъелись на нубов(меня?) :) Ну хотите обоснований, я обосную.

Где в моем сообщении ошибка?
Ну как бэ к чему этот
PHP:
"[a-z\d.-]"
код приведен был, вообще не понятно.
У вас кода дело в том что нет, или вы хотите сказать, что вот это "a-z0-9.-" по rfc? То что вы привели - не соответствует ничему вообще, ну то есть ни rfc, ни тому что нужно ТС, ибо что нужно ТС он и сам, похоже, не знает. А так, насчет совета про квантификаторы - спасибо, буду знать. :)
 

Dareczek

Новичок
уровень нубизма зашкаливает... неужели ты не понимаешь, что в остальных регах этот пример тоже прокатит?

Кому надо, что бы "это" не прошло валидацию? Чем грозит? Взломом сайта? Пример в студию. Что значит "чтобы такие"? Дай формальное определение термина, какие домены "такие", а какие "не такие".
Опять 25 ))). Мне нужно разсортировать тысячу доменов по разным доменным зонам. Т.е домены .ru к доменам .ru домены .com к доменам .com . Теперь понимаете почему мне именно нужно было написать такую срогую проверку? )
 

hell0w0rd

Продвинутый новичок
PHP:
function getDomenZone($url)
{
    $dotPos = strrpos($url, '.');
    return substr($url, $dotPos);
}
и зачем регулярки?
Хотя не пойдет... есть всякие com.ua... Надо тогда составить список возможных доменных зон, потому что есть как и com так и ua
 

Ragazzo

TDD interested
hell0w0rd
а что если я тебе скажу что справа может стоять точка в конце имени? ;)
 

hell0w0rd

Продвинутый новичок
Dareczek
Регулярки преобразуются к этому. Если грамотно работать со строками - никакие регулярки не нужны. чтобы точно узнать - надо протестировать:)
 

Dareczek

Новичок
Dareczek
Регулярки преобразуются к этому. Если грамотно работать со строками - никакие регулярки не нужны. чтобы точно узнать - надо протестировать:)
Регулярка есть регулярка )). Как я выше писал мне нужно проверить тысячу доменных имен. Т.е мне теперь 1к раз вызывать функцию? Пока она все пропилит и веки пройдут. ))
 

hell0w0rd

Продвинутый новичок
Ragazzo
А то если я скажу что есть функция trim?
PHP:
function getDomenZone($url)
{
    $url = trim($url, '.');
    $dotPos = strrpos($url, '.');
    return substr($url, $dotPos);
}

echo getDomenZone('google.com');
echo getDomenZone('google.com.');
Если хочется - rtrim:)
 

hell0w0rd

Продвинутый новичок
Регулярка есть регулярка )). Как я выше писал мне нужно проверить тысячу доменных имен. Т.е мне теперь 1к раз вызывать функцию? Пока она все пропилит и веки пройдут. ))
А preg* - это не функция чтоли?
PHP:
function getDomenZone($urls)
{
    $result = array();
    foreach ($urls as $url) {
        $temp = trim($url, '.');
        $dotPos = strrpos($temp, '.');
        $result[substr($temp, $dotPos)][] = $url;
    }
    return $result;
}
 

Dareczek

Новичок
Ragazzo
А то если я скажу что есть функция trim?
function getDomenZone($url)
{
$url = trim($url, '.');
$dotPos = strrpos($url, '.');
return substr($url, $dotPos);
}

echo getDomenZone('google.com');
echo getDomenZone('google.com.');
Если хочется - rtrim:)
так это хуже регулярки (я теперь про количество кода). В регулярке написал так: preg_match(/[^\s]+\.([^\s]+)/, $g_str, $mass); Вроде так если не ошибаюсь )
 

hell0w0rd

Продвинутый новичок
Это функция, я просто имел ввиду что она дольше работать будеть. У меня 4млн ссылок за 90сек регулярка справляется. А про самодельную функцию я очень сомневаюсь :)
Можно 1000 выложить куда нибудь для тестов?) Если регулярки в цикле вызываешь - они еще и парсятся каждый раз. Регулярки превращаются в те же инструкции что ты и сам напишешь
 

Dareczek

Новичок
Можно 1000 выложить куда нибудь для тестов?) Если регулярки в цикле вызываешь - они еще и парсятся каждый раз. Регулярки превращаются в те же инструкции что ты и сам напишешь
Отправил вам в личку, если не тяжело сделайте тест. Я бы сам с удовольствием протестировал, просто пока занят. Но обязательно еще и сам проверью ))
 
Сверху