Об удвоении пробелов

April 14, 2009 by Andrew Tch · 2 Comments 

Код, который я переписывал, выполнял только одну задачу – на php удалять из строки повторяющиеся пробелы. Код мне приводить страшно – это очень дикий implode/explode. Не знает подрастающее поколение мощности regexp…
А ларчик-то просто открывается:

$q = preg_replace('/\s+/', ' ', $q);

—–
А если заказать разработку сайта во Владивостоке, вряд ли вам такой бред там напишут.

Автолинковка, или снова о регулярных выражениях

February 16, 2008 by Andrew Tch · 1 Comment 

Я болею, я овощь ©.

Писать, однако, временами что-то стоит.

Функция, находящая URL в тексте, заменяющая их на нормальные href и обрезающая, при необходимости. Используютеся регулярные выражения (частично стырено с Symfony) и лямбда-функции (URL auto-linking in php). Enjoy & feel free to use.

function truncateString($string$length){    if(mb_strlen($string"UTF-8") <= $length)        return $string;    else        return mb_substr($string0$length"UTF-8") . "...";}

function autoLinkText($text){    $autolink_re '~        (                       # leading text            <\w+.*?>|             #   leading HTML tag, or            [^=!:\'"/]|           #   leading punctuation, or            ^                     #   beginning of line        )        (            (?:https?://)|        # protocol spec, or            (?:www\.)             # www.*        )        (            [-\w]+                   # subdomain or domain            (?:\.[-\w]+)*            # remaining subdomains or domain            (?::\d+)?                # port            (?:/(?:(?:[\~\w\+=%-]|(?:[,.;:][^\s$]))+)?)* # path            (?:\?[\w\+%&=.;-]+)?     # query string            (?:\#[\w\-]*)?           # trailing anchor        )        ([[:punct:]]|\s|<|$)    # trailing text        ~x';            return preg_replace_callback(        $autolink_re,        create_function('$matches''            if (preg_match("/<a\s/i", $matches[1]))            {                return $matches[0];            }            else            {                return $matches[1] . \'<a href="\' .                ($matches[2] == "www." ? "http://www." :                 $matches[2]).$matches[3].\'" target="_blank">\' .                truncateString($matches[2].$matches[3], 35).                \'</a>\'.$matches[4];            }        ')    , $text);}

Валидация URL при помощи Regex

January 8, 2008 by Andrew Tch · 8 Comments 

В процессе реанимации этого блога понадобилось сделать валидацию вводимых URL при помощи Regex. При помощи гугла и некоторого количества мозга получилось вот что (ессесно, удаляем абзацы):

 

/^((https?|ftp)://)?([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+$_.-]*)?$/i

 

т.е. валидация URL с указанием/без указания протокола (http, https, ftp), с возможностью указания имени пользователя (http://user:password@host.com), использования RealUrl’s (www.host.com/foo/bar), параметров и anchor’ов (http://www.noop.lv/foo/bar/index.php?foo=boo&string=a%20a#anchor_one).

 

При указании выражения в PHP в строке с двойными кавычками не забывайте экранировать $.