Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проверить корректность входных данных [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 20:51:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Осталось разбить регуляркой строку на симметричные куски и проверять этой ф-цией как callback:
PHP:
скопировать код в буфер обмена
  1. $source = "{{()}}";
  2.  
  3. function compareBrackets($str) {
  4.  
  5.   $len = strlen($str);
  6.   $half = $len/2;
  7.  
  8.   if (!is_int($half)) return false;
  9.  
  10.   $pair = array("{" => "}","(" => ")");
  11.  
  12.   for ($i= 0; $i < $half; $i++,$len--) {
  13.     if ($pair[substr($str,$i,1)] != substr($str,$len-1,1)) return false;
  14.     }
  15.  
  16.   return true;
  17.  
  18.   }
  19.  
  20. var_dump(compareBrackets($source));

Щас докурим Радость
 
 Top
romanov
Отправлено: 29 Ноября, 2011 - 21:19:36
Post Id


Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




я сам примерно тоже самое написал только что делать если передана такая строка {()}{}
(Добавление)
как можно разбить эту строку{()}{} на семметричные куски
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 21:36:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $source = "{{()}}{}(((())))";
  2.  
  3. function compareBrackets($source) {
  4.  
  5.         preg_match_all('#\{+\(*\)*\}+|\(+\{*\}*\)+#',$source,$m);
  6.         for ($g = 0; isset($m[0][$g]); $g++) {
  7.  
  8.                 $str = $m[0][$g];
  9.  
  10.                 $len = strlen($str);
  11.                 $half = $len/2;
  12.  
  13.                 if (!is_int($half)) return false;
  14.  
  15.                 $pair = array("{" => "}","(" => ")");
  16.  
  17.                 for ($i= 0; $i < $half; $i++,$len--) {
  18.                         if ($pair[substr($str,$i,1)] != substr($str,$len-1,1)) return false;
  19.                         }
  20.  
  21.                 }
  22.  
  23.         return true;
  24.  
  25.         }
  26.  
  27. var_dump(compareBrackets($source));
 
 Top
romanov
Отправлено: 29 Ноября, 2011 - 21:40:29
Post Id


Гость


Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




спасибо большое вы мне нереально помогли, если это работает на любой несемметричной строке то вообще круто.
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Ноября, 2011 - 21:48:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Проверяйте, тестируйте.. Закатив глазки
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB