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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: url и регулярные выражения

Сообщения:  [1-5] 

 
 автор: exp   (17.03.2008 в 23:27)   письмо автору
 
   для: exp   (17.03.2008 в 22:43)
 

проверил

забылещё скобку закрыть и * :)
вот что имел ввиду
<?
$url
="   http://site.ru/download.php?file=test  ";


if (!
preg_match('#^(http:\/\/)?(?:[a-z1-9][a-z0-9\-]+\.)+?[a-z]{2,4}(?:\/[a-z0-9\/\?\.\-_%&=]*)?$#i', ($url trim($url)))) $url ''
echo 
$url;
?>

тут обязательное только начинающееся с цифры или буквы слово (заканчивающееся точкой) из минимум двух букв
(?:[a-z1-9][a-z0-9\-]+\.)+? с повтором неограниченное число раз , можно ограничитьпоменяв +? на {1,4}

и последующая зона домена
[a-z]{2,4}

   
 
 автор: exp   (17.03.2008 в 22:43)   письмо автору
 
   для: Ослик   (17.03.2008 в 20:49)
 

зависит от того для чего всё это

тут судя по функции проверялось поле для ввода url, которое может быть с путём до какого-нибудь файла и с GET-параметрами, добавлялось http:// , если явно не указан протокол

потом ещё для чего-то вся латиница переводилась в нижний регистр (помоему неправильно , разные буквы - разные пути)

а так если например вводится адрес файла для скачивания по http его сайтом, то можно упростить
например до такого
<?
if (!preg_match('~^(?:http://)?(?:[a-z1-9][a-z0-9\-]+\.)+?[a-z]{2,4}(?:/[a-z0-9/\?\.\-_%&=])?$~i', ($url trim($url)) ) $url '';
# или вместо $url = '';  return; наверное . потом так-же добавлять http:// если нет

# непроверял 

но тоже ограничено слегка , например запрещает указывать порт, или @ , в путях непропустит символы ~@;,... которые там иногда бывают, и например такой адрес http://127.0.0.127/...
неподдерживает протокол кроме http

и наоборот пропустит адрес типа 1-.xx

идеальных способов нет, или есть но всё-равно адрес может не существовать и выражение будет больше

.... тоже применил подмаску (?: ), говорят лучше тем что не занимает память процесса поиска

книгу Фридла тоже никак не осилю :)

// поправил , забыл ! перед preg_match

   
 
 автор: Ослик   (17.03.2008 в 20:49)   письмо автору
 
   для: exp   (17.03.2008 в 20:12)
 

Со вторым понял,спасибо.
exp,я немножко перефразирую вопрос по поводу первого.
Меня более интересует тот вопрос какое выражение вставить, ведь если я понимаю
то можно было бы написать просто так
$urll = "#^(http://)?[-a-z0-9\.]+([-a-z0-9]+\.(html|php|pl|cgi))?".
"([-a-z0-9_:@&\?=+\.!/~*'%$]+)?$#i";
и не воротить столько кода.
Отсюда вопрос - какое выражение по Вашему мнению ,лучше испозьзовать для проверки,с точки зрения безопасности ...???Если не затруднит ,посоветуйте пожалуйста.

З.Ы.за ссылку на справочник спасибо.
Сейчас вот читаю Фридла "Регулярные выражения"
пытаюсь вьехать...сначала вроде как просто и понятно,а чем дальше...не очень то получаеться

   
 
 автор: exp   (17.03.2008 в 20:12)   письмо автору
 
   для: Ослик   (16.03.2008 в 23:55)
 

здесь в справочнике в функциях для работы с регулярными выражениями есть ссылка "синтаксис регулярных выражений"

при желании и творческой фантазии :) потестив с недельку можно многое понять

на словах нереально такое объяснить

"~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&"."?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i"

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

:) второе выражение попроще
<?
 preg_replace
("/[^\x20-\xFF]/""", @strval($str));

встроке заменяются на '' (всмысле удаляются) все символы (если кодировка однобайтная(не utf-8))
до пробела
посмотреть какой символ каким байтом (или байтами) обозначается можно например в windows нажать Пуск->Выполнить , вписать "charmap" -> Ok и при выборе например "!"
в самом низу будет строка U+0021 Exclamation Mark,

что означает что в юникоде этот символ на самом деле два байта с значениями в шестнадцатеричном представлении 00 и 21
:) справочник читать всё-же получше однако

вообщето не все символы в этой "charmap"
и возможно чем-то лучше можно найти в "eudcedit"

   
 
 автор: Ослик   (16.03.2008 в 23:55)   письмо автору
 
 

Прошу знающих ,поясните "по человечески" регулярное выражение в такой функции .
То есть разрешеться только https|ftp|telnet или запрещается com|net|org и т.д? ...почему то ,это вроде как не работает.
Подкажите,пожалуйста плиз как расшифровать эти выражения что
находятся в preg_match и preg_replace.Мне понятно только ,что разрешены буквы нижнего регистра и цифры {от,до},а с остальным регулярным ... :-(

function f_url($urll)
{
$urll = trim(f_trim($urll));
if (strlen($urll) === 0) return '';
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&"."?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $urll, $ok)) return -1;
if (!strstr($urll, "://")) $urll = "http://".$urll;
$urll = preg_replace("~^[a-z]+~ie", "strtolower('\\0')", $urll);
return $urll;
}
function f_trim($str)
{
return preg_replace("/[^\x20-\xFF]/", "", @strval($str));
}


Вызов функции :
$url="http://".$_SERVER['SERVER_NAME']."".$_SERVER['REQUEST_URI'];
if (!empty($url))
{
$urll = f_url($url);
if (strlen($urll) < 3)
{
$errors = 'Неверно набранная Веб-страница ';
}
}


Заранее благодарю за помощь.

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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