Комплексный анализ сайта -> Скрипты -> Форум

регулярные выражения

Скрипты 13 Янв 2012

Php скрипты

>

Примеры по регулярным выражениям

1. Проверка правильности введения имени в форму. Надо, чтобы были допустимы русские, английские буквы пробел и знак подчеркивания, если вдруг встречается другой знак, то выводим ошибку.

$login = "Alex 777 опа"; - правильно 
$login = "hi / my name \ is ! Oleg"; - неправильно

<?php 
function vlogin ($login{
    $login = trim ( preg_replace ("/[ˆ\x20-\xFF]/""", @strval ($login))); 
    if ( strlen ($login) == 0){ return error; }
    if ( preg_match ("/[ˆa-zA-Zа-яА-Я0-9_ ]/",$name)) { return error; }
    else {return $login;} 
   }
    // ранее $login получен нами из формы
$login = vlogin ($login);
if ($login != 'error'){ print "Логин введен правильно";}
?>

 
Здесь допустимы:

a-zA-Z английские буквы, все 
а-яА-Я русские буквы, все
0-9 все цифры
_ зак подчеркивания
\ и пробел


2. Проверка правильности введение Емайл пользователем.

<?php 
function vm ($mail{
$mail = trim ( preg_replace ("/[ˆ\x20-\xFF]/""", @strval  ($mail))); 
if ( strlen ($mail) == 0){ return error; }
$array = explode ( "@", $mail );
if ( preg_match ( "/[_\.-]{2}/", $array[0] ) ){ return error; }
if ( preg_match ( "/[_\.-]{1}$/", $array[0]) ){ return error; }
if ( !preg_match ("[a-z0-9_\.-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail)){ return error; }
return $mail;
}
    // ранее $email получен нами из формы
$email = vm ($email);
if ($email != 'error'){ print "Емайл введен правильно";}
?>


3. Проверка URL сайта

<?php 
function vurl($url{
$url = trim ( preg_replace ("/[ˆ\x20-\xFF]/""", @strval ($url)));
if ( strlen ($url) == 0) { return error; }
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",$url,$ok)) { return error; } 
if ( !strstr ($url,"://")) $url = "http://".$url;
$url = preg_replace ("[a-z]+~ie""strtolower('\\0')"$url);
return $url;
}
    // ранее $url получен нами из формы
$url = vurl ($url);
if ($url != 'error'){ print "URL введен правильно";}
?>


4. Нахождение ссылок на странице .html

<?php
function vlinks ($page){
   $page = @implode ( '', @file ($page));
   if (! preg_match_all ("/<[Aa][ \r\n\t]{1}[ˆ>]*[Hh][Rr][Ee][Ff][ˆ=]*=".
      "[ '\"\n\r\t]*([ˆ \"'>\r\n\t#]+)[ˆ>]*>/",$page,$url_list))
       { return error; }
   $link = array (); 
       foreach ($url_list as $url_temp){ 
           foreach ($url_temp as $urla){ 
              if ( !preg_match ("~href~i",$urla)
                 and !preg_match ("~javascript~i",$urla)
                 and !preg_match ("~mailto~i",$urla)
                 and !preg_match ("~#~i",$urla)){ 
                 $link[] = $urla;
                }
            }
         } 
     return $link;
   }

    // index.htm - страничка с которой считываем ссылки
$links = vlinks ("index.htm");
    // выводим ссылки на печать
if ($links != 'error'){ 
      while ( list ($key$val) = @each ($links)){
            print "$key. <a href=$val$val </a> <br>\n";
           }
  }
?>


Нашли все ссылки html на страничке.


5. Заменить все Большие буквы на маленькие.

<?php
function ruLow ($string){
$string = trim ( preg_replace ("/[ˆ\x20-\xFF]/""", @strval ($string)));
if ( strlen ($string) == 0 ) { return error; }
$down = strtr ($string,
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯQWERTYUIOPASDFGHJKLZXCVBNM',
'абвгдеёжзийклмнопрстуфхцчшщъыьэюяqwertyuiopasdfghjklzxcvbnm');
return $down;
}
    // $string - строка полученная от пользователя
if ($string != 'error'){ print "Эту строку используют в поисковиках"; }
?>


Так, обычно, поисковые системы типа Яндекс, фильтруют текст для поиска в своей базе.


 6. Заменить все русские буквы  на их эквиваленты.

<?php
function replace_cyr ($path){
$search = array ("'Ё'", "'А'", "'Б'", "'В'", "'Г'", "'Д'", "'Е'", "'Ж'", "'З'", "'И'", "'Й'", "'К'", "'Л'", "'М'", "'Н'", "'О'", "'П'", "'Р'", "'С'", "'Т'", "'У'", "'Ф'", "'Х'", "'Ц'", "'Ч'", "'Ш'", "'Щ'", "'Ъ'", "'Ы'", "'Ь'", "'Э'", "'Ю'", "'Я'", "'а'", "'б'", "'в'", "'г'", "'д'", "'е'", "'ж'", "'з'", "'и'", "'й'", "'к'", "'л'", "'м'", "'н'", "'о'", "'п'", "'р'", "'с'", "'т'", "'у'", "'ф'", "'х'", "'ц'", "'ч'", "'ш'", "'щ'", "'ъ'", "'ы'", "'ь'", "'э'", "'ю'", "'я'", "'ё'", "'0'e");
$replace = array ('&#1025;', '&#1040;', '&#1041;', '&#1042;', '&#1043;', '&#1044;', '&#1045;', '&#1046;', '&#1047;', '&#1048;', '&#1049;', '&#1050;', '&#1051;', '&#1052;', '&#1053;', '&#1054;', '&#1055;', '&#1056;', '&#1057;', '&#1058;', '&#1059;', '&#1060;', '&#1061;', '&#1062;', '&#1063;', '&#1064;', '&#1065;', '&#1066;', '&#1067;', '&#1068;', '&#1069;', '&#1070;', '&#1071;', '&#1072;', '&#1073;', '&#1074;', '&#1075;', '&#1076;', '&#1077;', '&#1078;', '&#1079;', '&#1080;', '&#1081;', '&#1082;', '&#1083;', '&#1084;', '&#1085;', '&#1086;', '&#1087;', '&#1088;', '&#1089;', '&#1090;', '&#1091;', '&#1092;', '&#1093;', '&#1094;', '&#1095;', '&#1096;', '&#1097;', '&#1098;', '&#1099;', '&#1100;', '&#1101;', '&#1102;', '&#1103;', '&#1105;', '0');
return preg_replace ($search,$replace,$path);
} 

    // на странице index.htm заменим все русские буквы
$page = replace_cyr ( @implode ( '', @file ("index.htm")));
print $page
?>

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

7. Функция анти-мат. 
Если из формы нам передается от пользователя информация, то ее нужно проверить на использование несанкционированной лексики. То есть, заменять маты, например, на '*'. Для этого создадим файл 'autochange.dat' и в нем разместим строки с плохими словами так: 

муда::*::
mуда::*::
myда::*::
мyда::*::

В первом отсеке располагаем мат, а во втором, то на что его будем менять. Нам надо сделать так, чтобы пользователь не смог воспользоваться пробелами в словах, переходами на новую строку, чередованием строчных и прописных букв, а так же английских букв эквивалентов. Во всех случаях функция должна заменять мат на звездочку. Файл анти-мат можно взять, скачав наш форум. 

<?php 
    // файл база матов
$autochange = "autochange.dat";
    // функция замены
function auto ($path){
    global $autochange;
    $general = file ($autochange);
    if ( !empty ($general)){
        for ($ii=0; $ii < count ($general); $ii++){
            list ($aut3,$aut2) = explode ("::"$general[$ii]);
            $aut3_arr = preg_split ("//",$aut3);
            $content = '~';
            for ($iii=0; $iii < sizeof ($aut3_arr); $iii++){ $content .= $aut3_arr[$iii]."[ \r\n\t]*"; }
            $content .= '~is';
            if ( preg_match ($content,$path)){$path = preg_replace ($content,' '.$aut2.' ',$path); }
          }
      }
    return $path;
  } 
    // $path - данные, посланные пользователем из формы 
$path = auto ($path); 
    // теперь в $path нет слов, которые были в вашем файле "autochange.dat" 
?>

8. Заменить функцию parse_url своей. 
Если parse_url работает нестабильно, то заменим её своей функцией: 

<?php
    // заменитель parse_url
function _parse_url ($path{
  preg_match ("~(.+)?:\/\/([ˆ\/]+)([ˆ\?]*)[\?]?([ˆ\/]*)~",  $path,  $arr);
  if ($arr[0]==''){ return array (path =>$path); }
  return array (scheme => $arr[1], host => $arr[2], path => $arr[3], query => $arr[4]);
}

    // проверим адрес http://www.omsk777.ru/all.php?act=posixphp
$adress = 'http://pr-ic.ru/blog/externallink.htm?id=61';
$arr = _parse_url ($adress);

    // распечаетм массив массиве
print "<pre>";
print_r ($arr);
print "</pre>";

    // получим
    // Array
    //  (
    //    [scheme] => http
    //    [host] => http://www.omsk777.ru
    //    [path] => /all.php
    //    [query] => act=posixphp
    // )
?>

9.  Преобразуем двойные кавычки в html в открывающие и закрывающие.
Двойные кавычки в html тексте могут обозначаться следующими способами:

" просто двойная кавычка
&quot; заменитель html
&#147; открывающаяся, заменитель html “
&#148; закрывающаяся, заменитель html ”
&#171; открывающаяся, заменитель html «
&#187; закрывающаяся, заменитель html »
&laquo; открывающаяся «
&raquo; закрывающаяся »

Заменим в строке все кавычки на открывающиеся и закрывающиеся в виде &laquo; и &raquo; 

<?php
$str = 'Вот "такая" &#171;дикая&#187; &quot;строка&quot; Html';

function replace_kav ( $path ){
   $path = str_replace ( '"', '&quot;', $path );
   $path = preg_replace ( "~&#(171|187);~s", '&quot;', $path );
   if ( ! preg_match ( "~&quot;~", $path ) ) { return $path}
       $array = explode ( "&quot;", $path );
       $lines = count ( $array );
       $path = "";
       for ( $i = 0; $i < $lines$i++ ) { 
           if ( $i % 2 == 1 ) { $path .= $array [$i] . '&raquo;'; }
           else { $path .= $array [$i] . '&laquo;'; }
          }
    return substr ( $path, 0, -7 );
  }

    // напечатем преобразованную строку 
print replace_kav ( $str );
?>


Теперь усложним задачу и сделаем тоже самое, но в Html тексте 

<?php
    // будем изменять файл index.htm
$file = "index.htm";

function replace_kav ( $path ){
    if ( is_file ( $path ) or preg_match ( "~http://~i", $path ) ) { $path = implode ("", file ( $path ) ); }
    if ( preg_match ("~<[ˆ>]*>(.*)</[ˆ>]*>~s", $path)){
        if ( preg_match ("~<body[ˆ>]*>(.*)</body[ˆ>]*>~is", $path$arr)){
            $_path = $arr[1];
          }
        else { $_path = $path} 
        preg_match_all ( "~([>]+)([ˆ><]+)([<]+)~sU"$_path$arr, PREG_PATTERN_ORDER );
        while ( list ( $key$val ) = @each ( $arr[2] ) ){
            if ( ! preg_match ( "~\"~"$val ) ) { continue}
            $_val = preg_replace ( "~\"~s", '&quot;', $val );
            $path = str_replace ( $val$_val$path ); 
          }
      }
    else { $path = str_replace ( '"', '&quot;', $path ); } 
    $path = preg_replace ( "~&#1(71|87);~s", '&quot;', $path );
    if ( !preg_match ( "~&quot;~", $path ) ) { return $path}
    $path = preg_replace ("~&#147;~", "&laquo;", $path); 
    $path = preg_replace ("~&#148;~", "&raquo;", $path); 
    $path = preg_replace ("~(ˆ|[ \r\n\t]{1})&quot;&quot;([\w]{1})~", "\\1&laquo;&laquo;\\2", $path);
    $path = preg_replace ("~([\w\.\?\!\+-]{1})&quot;&quot;([ \r\n\t\.]?|$)~", "\\1&raquo;&raquo;\\2", $path);
    $path = preg_replace ("~(ˆ|[ \r\n\t]{1})&quot;([\w]{1})~", "\\1&laquo;\\2", $path);
    $path = preg_replace ("~([\w\.\?\!\+-]{1})&quot;([ \r\n\t\.]?|$)~", "\\1&raquo;\\2", $path);

    $array = explode ( "&quot;", $path );
    $lines = count ( $array );
    $path = "";
    for ( $i = 0; $i < $lines$i++ ) { 
        if ( $i % 2 == 1 ) { $path .= $array [$i] . '&raquo;'; }
        else { $path .= $array [$i] . '&laquo;'; }
      }
    $path = substr ( $path, 0, -7 );
    if ( preg_match_all ("~<script[ˆ>]*>(.*)</script[ˆ>]*>~isU", $path$arr, PREG_PATTERN_ORDER )){
        while ( list ( $key$val ) = @each ( $arr[1] ) ){
            $_val = preg_replace ( "~&(l|r)aquo;~s", '"', $val );
            $path = str_replace ( $val$_val$path );
          }
      } 
    return $path;
  }

    // распечатаем изменённый index.htm
print replace_kav ( $file );
?>

http://omsk777.ru/robotbad.html

Комментариев нет на запись: регулярные выражения

Оставить комментарий



Похожие записи

Ранее

Свежие записи

Meta

Меня находят по фразам

Рубрики

Архив

Свежие комментарии

Ссылки

Социальные закладки

Ссылки

Сайт работает на CMS Lite Publisher Перепечатка любых материалов © 2012 без разрешения автора запрещена. | 7.42MB | 2.18Sec pr-ic.ru pr-ic.ru