php preg_split()。不是正确的模式并将句号转换为逗号?

php preg_split(). Not the right pattern and converts period to comma?

我有一个问题。我想缩放存储在值中的一些 CSS 值。 (简化)我做了一个函数来放大它们。

有两件事我没弄对。

$string = '0.3rem';
$scale = 1.5;
echo calcCssNewValue( $string, $scale ); 

function calcCssNewValue( $string, $scale ){

    $stringArray = preg_split('/[a-zA-Z]*/', $string, 2, PREG_SPLIT_DELIM_CAPTURE);

    if (  count( $stringArray ) == 1 ) {
        $returnVal = (  $stringArray[0] * $scale) ;
    } else {
        $returnVal = ( $stringArray[0] * $scale) . $stringArray[1];
    }

    return $returnVal;
}

result: '0,45em' expected: '0.45rem' 请注意它缺少 r 并且有一个逗号而不是句点。

我哪里做错了? :)

我没有得到相同的结果 运行 你的代码,我的拆分结果是空字符串数组和原始值。 * 可能是问题所在,因为它匹配模式的 个匹配项。

所以也不确定逗号是什么,因为我没有看到它。

我会像这样调整你的拆分,似乎完成了:

$stringArray = preg_split( '/([a-zA-Z]+)/', $string, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

这需要:

  • 要匹配的模式 至少 一次
  • 将它包装在 () 中使分隔符捕获工作,因为它只适用于
  • 不添加空滴挥之不去的空物品(模式似乎不计入两个限制)

解决方案的最大部分来自@Rarst

我得到了这段代码:

function calcCssNewValue( $string, $scale ){

    $stringArray = preg_split( '/([a-zA-Z]+)/', $string, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

    $returnVal = number_format( (  $stringArray[0] * $scale ), 2, '.', ''); ;

    if (  count( $stringArray ) > 1 ) {

        $returnVal .= $stringArray[1];
    }

    return $returnVal;

}

$stringArray 作者是@Rarst。

我添加的 $returnVal number_format()。并将小数点强制为实际点。不知何故,我不知道为什么,它把小数点变成了逗号。但是只有在做数学的时候...