Здесь представлена крутая регулярка на крутую проверку урл, но. она не пахает.
Ну, пахает, но всегда выдает ложь, даже при вводе http://vk.com/
public static function checkURI($file) {
$regular = '^#(https?|ftp|telnet)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+'.
'(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?'.
'(#[a-z_.-][a-z0-9+\$_.-]*)?\$#iu';
return preg_match($regular, $file);
}
Выдержка из своего проекта, "работает" криво. Подскажите, что с ней не так? Или дайте хорошую регулярку для моего случая..
Делаю мини скрипт вида wget для линуха, чтобы качать файлы с нета и сохранять их. В общем, нужно валидировать ссылку для скачивания.
Заранее спасибо.
З.Ы - ошибок вроде не нашел в паттерне, да и все пишут, что работает она на ура.
Спустя 22 минуты, 30 секунд (28.06.2011 - 20:23) Winston написал(а):
Цитата (alex12060 @ 28.06.2011 - 20:00) |
ошибок вроде не нашел в паттерне |
Опять не почитал про регулярные выражения? Ты не выполнил домашнее задание Садись, два ! :D
По теме сходу увидел 2 ошибки это в первой строке паттерна '^# а надо '#^
И это '(#[a тогда хотя бы уже так '(\#[a
Вот я ее немного подправил, вроде работает
// Я тестировал на таких адресах. Пробуй :)
//$text = "http://phpforum.ru/index.php?showtopic=47331&hl=";
//$text = "http://google.ru/";
//$text = "http://www.sql.ru/docs/sql/u_sql/ch12.shtml";
//$text = "http://www.google.ru/search?source=ig&hl=ru&";
//$text = "vk.com";
$pattern = '#^(?:(https?|ftp|telnet)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+'.
'(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?'.
'(\#[a-z_.-][a-z0-9+\$_.-]*)?$#iu';
if(preg_match($pattern, $text, $mt))
echo 'OK';
else
echo 'BAD';
echo '<br/>';
print_r($mt);
echo '<br/>';
echo $mt[0];
Спустя 14 минут, 10 секунд (28.06.2011 - 20:37) alex12060 написал(а):
PHPprogramer
Да, спасибо, подправил)
Но все равно на выходе фалс выдает. Что за смрад? Оо
Да, спасибо, подправил)
Но все равно на выходе фалс выдает. Что за смрад? Оо
Спустя 3 минуты, 17 секунд (28.06.2011 - 20:40) Winston написал(а):
Цитата (alex12060 @ 28.06.2011 - 20:37) |
Но все равно на выходе фалс выдает |
Ссыль можешь дать, на какой проверяешь
Спустя 4 минуты, 24 секунды (28.06.2011 - 20:45) alex12060 написал(а):
Спустя 4 минуты, 10 секунд (28.06.2011 - 20:49) Winston написал(а):
:blink: Не поверишь, но у меня работает.
Вот такой код я написал
Вот такой код я написал
Свернутый текст
$text = "http://95.52.170.242/proxy/";
function checkURI($file) {
$regular = '#^(?:(https?|ftp|telnet)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+'.
'(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?'.
'(\#[a-z_.-][a-z0-9+\$_.-]*)?$#iu';
return preg_match($regular, $file);
}
if(checkURI($text))
echo 'OK';
else
echo 'BAD';
Спустя 4 минуты, 19 секунд (28.06.2011 - 20:53) alex12060 написал(а):
PHPprogramer
Я тебе верю)
Даже не знаю в чем дело оО
Попробую пересмотреть свой код.
Я тебе верю)
Даже не знаю в чем дело оО
Попробую пересмотреть свой код.
Спустя 5 минут, 40 секунд (28.06.2011 - 20:59) Winston написал(а):
Я не такой знаток ООП, но может проблема в этом ?
Цитата (alex12060 @ 28.06.2011 - 20:00) |
static |
Мне кажется статик не может ничего возвращать? (Или я ошибаюсь ?)
Спустя 32 секунды (28.06.2011 - 20:59) bulgakov написал(а):
И в чем же дело? Просто интересно.
Спустя 2 минуты, 1 секунда (28.06.2011 - 21:01) bulgakov написал(а):
Цитата |
Мне кажется статик не может ничего возвращать? (Или я ошибаюсь ?) |
А сами человеку двойки за регулярки ставите) двойка вам за ООП) Доступ к статическим методам или свойствам или константам класса осуществалется по типу:
NameClass::static_method();
Спустя 1 минута, 28 секунд (28.06.2011 - 21:03) alex12060 написал(а):
bulgakov
PHPprogramer
Нет, не в static.
Я просто кривоглазый
У меня переплелась сначала переменная $file с внутренними (не, не правда)
В общем, сначала была кривая регулярка, а потом я забыл поменять с $pattern на $regular
Спасибо всем
PHPprogramer
Нет, не в static.
Я просто кривоглазый
У меня переплелась сначала переменная $file с внутренними (не, не правда)
В общем, сначала была кривая регулярка, а потом я забыл поменять с $pattern на $regular
Спасибо всем
Спустя 1 минута, 7 секунд (28.06.2011 - 21:04) bulgakov написал(а):
А уж возвращать или не возвращать что-то то для этого как и в обычных функциях return, а вот если бы метод был объявлен в классе как private static function method_name() тогда доступ к нему напрямую был бы запрещен.
Спустя 1 минута, 14 секунд (28.06.2011 - 21:05) Winston написал(а):
Цитата (bulgakov @ 28.06.2011 - 21:01) |
двойка вам за ООП |
Согласен, что за ООП мне 2, плохо я его знаю
Цитата (bulgakov @ 28.06.2011 - 21:01) |
Доступ к статическим методам или свойствам или константам класса осуществалется по типу |
Это я знаю, просто думал, что он не может ничего возвращать. Только что проверил. И у меня работает та ф-я что у alex12060'a только с подправленным паттерном.
Спустя 1 минута, 37 секунд (28.06.2011 - 21:07) Winston написал(а):
Цитата (alex12060 @ 28.06.2011 - 21:03) |
Нет, не в static. Я просто кривоглазый |
Спустя 1 час, 45 минут, 55 секунд (28.06.2011 - 22:53) Invis1ble написал(а):
alex12060
Как насчет:
? :)
Как насчет:
$url = 'http://95.52.170.242/proxy/';
$is_url = (bool)filter_var($url, FILTER_VALIDATE_URL);
? :)
Спустя 23 минуты, 46 секунд (28.06.2011 - 23:17) bulgakov написал(а):
Вот я знал что есть подобная функция просто не там в мануале искал) Спасибо за наводку) А то понаписывали тут регулярок ненужных)) Да здравствуют "новые старые" велосипеды)
Спустя 5 минут, 20 секунд (28.06.2011 - 23:22) Invis1ble написал(а):
bulgakov
Самое интересное - в нете полно подобных извращений, и все соревнуются, кто круче регэксп составит
Недавно наткнулся на одну статейку, там про IP шла речь, статья довольно познавательная, но в ней было подобное извращение - автор написал функцию с регуляркой для валидации IP-адреса. И зачем спрашивается, когда есть filter_var($ip, FILTER_VALIDATE_IP) ?
Самое интересное - в нете полно подобных извращений, и все соревнуются, кто круче регэксп составит
Недавно наткнулся на одну статейку, там про IP шла речь, статья довольно познавательная, но в ней было подобное извращение - автор написал функцию с регуляркой для валидации IP-адреса. И зачем спрашивается, когда есть filter_var($ip, FILTER_VALIDATE_IP) ?
Спустя 7 минут, 1 секунда (28.06.2011 - 23:29) bulgakov написал(а):
Во во, я тоже когда смотрю на темы с названиями типа - Помогите с регуляркой, читаю проблему и лезу искать как это решить с помощью функци, большинство регулярок заменяются простейшими функциями, просто не привыкли думать что велосипеды за нас уже написали)
Спустя 9 часов, 40 минут, 30 секунд (29.06.2011 - 09:09) alex12060 написал(а):
Invis1ble
А Вы в курсе, что filter_var() доступна с 5 версии, а доработана уже с версии 5.2 ?
(PHP 5 >= 5.2.0)
Я давно смотрел на эту функцию, но она сильно ограничивает круг пользователей
Подожду до 6 пхп, далее уже можно будет использовать и ее)
А Вы в курсе, что filter_var() доступна с 5 версии, а доработана уже с версии 5.2 ?
(PHP 5 >= 5.2.0)
Я давно смотрел на эту функцию, но она сильно ограничивает круг пользователей
Подожду до 6 пхп, далее уже можно будет использовать и ее)
Спустя 9 минут, 6 секунд (29.06.2011 - 09:18) Invis1ble написал(а):
alex12060
В курсе, а ты работаешь с 4-й версией ?
В курсе, а ты работаешь с 4-й версией ?
Спустя 2 минуты, 21 секунда (29.06.2011 - 09:21) alex12060 написал(а):
Нет)
Но все-же)
Хотя, у меня один конструктор уже чего стоит с инкапсуляцией
Ладно, посмотрим)
Но все-же)
Хотя, у меня один конструктор уже чего стоит с инкапсуляцией
Ладно, посмотрим)
Спустя 57 минут, 18 секунд (29.06.2011 - 10:18) bulgakov написал(а):
Насчет 6 версии, 5.3 это и есть 6 версия только без поддержки юникода, команда по разработке 6 версии вроде разбежалась, поэтому ходят слухи что 6 не будет а будет сразу 7. Так что версия 5.3 это уже и есть 6.
Спустя 41 минута, 34 секунды (29.06.2011 - 11:00) DedMorozzz написал(а):
первый пост...
Цитата |
(https?|ftp|telnet)\ |
Здесь допускаються ЮРЛ начинающийся с
https,ftp,telnet
Т.е. адресс хттп: - уже не подходит. Кроме того, если без хттп - тоже. Выкинь её, иль засунь откуда взял
https,ftp,telnet
Т.е. адресс хттп: - уже не подходит. Кроме того, если без хттп - тоже. Выкинь её, иль засунь откуда взял
Спустя 8 минут, 6 секунд (29.06.2011 - 11:08) Invis1ble написал(а):
DedMorozzz
Цитата |
Т.е. адресс хттп: - уже не подходит |
от кого-кого, но от тебя, гуру регэкспов, я такого не ожидал....
Спустя 12 минут, 25 секунд (29.06.2011 - 11:20) DedMorozzz написал(а):
прочитал твой пост...Я слеп Знак вопроса не увидел, а веть специально смотрел его. Глаз замыленый, как любит Твин говорить
Спустя 3 минуты, 33 секунды (29.06.2011 - 11:24) DedMorozzz написал(а):
всё равно, регулярка кривая
1 - самое начало ^#(, должно быть так #^(. Сейчас указание границы До начала регулярки.
2 - [a-z0-9+!*(),;?&=\$_.-]+ это эквивалент просто [.]+, и остальные символы можно убрать. Но это крайне не логично, ибо в ЮРЛ таким образом может быть ВСЁ что угодно. И так в каждом блоке, спец знаки не экранированы
3 - адресс без http(s), ftp... не пройдёт, т.е. phpforum.ru - не валидно.
4 - ....и так далее
Нет смысла её фиксить, она убога, писалась какой-то калекой
1 - самое начало ^#(, должно быть так #^(. Сейчас указание границы До начала регулярки.
2 - [a-z0-9+!*(),;?&=\$_.-]+ это эквивалент просто [.]+, и остальные символы можно убрать. Но это крайне не логично, ибо в ЮРЛ таким образом может быть ВСЁ что угодно. И так в каждом блоке, спец знаки не экранированы
3 - адресс без http(s), ftp... не пройдёт, т.е. phpforum.ru - не валидно.
4 - ....и так далее
Нет смысла её фиксить, она убога, писалась какой-то калекой
Спустя 46 секунд (29.06.2011 - 11:25) Invis1ble написал(а):
Цитата |
Глаз замыленый |
Да знаю, бывает )
Насчет кривости регулярки - это точно