Hi-All-im-One函数用于将ltr-css转换为rtl,但任何格式都无法正常工作我的函数是
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;
}
代码测试功能$res=$MyConverter->rtlMargin("margin:1px 2px 3px 4px");
输出为边距:1 x 4 x 3 x 2 x;
但是
$res .= $MyConverter->rtlMargin("margin:1-px 2px 3-px 4px");
的输出为空错误
if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches))
在您的代码中,正则表达式只匹配带减号的大小,例如:-10px或-30%,您需要将"-"作为可选项,将"?"(问号)放在后面,就像"px"或"%"是可选项一样:(px|%)?
:
Your regexp: '~(-[0-9]+(px|%)?)~i'
Correct regexp: '~(-?[0-9]+(px|%)?)~i'
PS:请注意,3-px
不是有效的负边距,正确的语法是-3px
。无论如何,如果你仍然想匹配3-px,你可以使用这个正则表达式:'~(-?[0-9]+-?(px|%)?)~i'
参考:http://php.net/manual/en/regexp.reference.meta.php