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-&gt; rtlMargin(“margin:1px 2px 3px 4px”);
输出是 保证金:1px 4px 3px 2px;
但是
$res .= $MyConverter->rtlMargin("margin:1-px 2px 3-px 4px");
输出为空错误
if (preg_match_all('~(-[0-9]+(px|%)?)~i', $string, $matches))
答案 0 :(得分:0)
在你的代码中,正则表达式只匹配带有减号的大小,例如: - 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'