Об удвоении пробелов
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($string, 0, $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 в строке с двойными кавычками не забывайте экранировать $.