2015-11-27 2 views
1

Привет всем им одна функция для преобразования LTR CSS для РТЛ, но не работать правильно с помощью любого формата моя функцияNegative Номер preg_match_all

public function rtlMargin($string) 
{ 
    $string = trim($string); 
    if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches)) { 
     $c = count($matches['1']); 
     $p = $matches['1']; 
     if ($c == 4) 
      $order = implode(' ', array(
       $p['0'], 
       $p['3'], 
       $p['2'], 
       $p['1'])); 
     else 
      if ($c == 3) 
       $order = implode(' ', array(
        $p['0'], 
        0, 
        $p['2'], 
        $p['1'])); 
      else 
      if ($c == 2) 
       $order = implode(' ', array(
        $p['0'], 
        0, 
        0, 
        $p['1'])); 
      else 
      if ($c == 2) 
       $order = implode(' ', array(
        $p['0'], 
        0, 
        0, 
        $p['1'])); 
      else     
       $order = implode(' ', $p); 

     if (preg_match('/auto/',$string)) { 
      return 'margin: ' . $order . ' auto;' . '<br />'; 
     } 
     else 
     { 
      return 'margin: ' . $order . ';' . '<br />'; 
     }    
    } 

    return $string; 
} 

Код Функция тестирования Является ли $ разреш. = $ MyConverter-> rtlMargin (» margin: 1px 2px 3px 4px ");

Выход margin: 1px 4px 3px 2px;

Но

$res .= $MyConverter->rtlMargin("margin:1-px 2px 3-px 4px"); 

Выход Empty Bug Для

if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches)) 

ответ

0

В вашем коде, регулярное выражение соответствует только размеры с минусом, например: -10px или -30%, вам нужно сделать «-» необязательно поставить «?» (Знак вопроса) после того, как, по тому же пути, что «точек» или «%» являются: OPTIONALS (px|%)?:

Your regexp: '~(-[0-9]+(px|%)?)~i' 
Correct regexp: '~(-?[0-9]+(px|%)?)~i' 

PS: Заметим, что 3-px не является допустимым отрицательный запас, правильный синтаксис -3px. В любом случае, если вы все-таки хотел бы, чтобы соответствовать 3-точек вы можете использовать регулярное выражение: '~(-?[0-9]+-?(px|%)?)~i'

Ссылка: http://php.net/manual/en/regexp.reference.meta.php

Смежные вопросы