首页 > 解决方案 > php preg_split()。不是正确的模式并将句点转换为逗号?

问题描述

我有个问题。我想缩放一些存储在值中的 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'请注意,它缺少rand 有一个逗号而不是句号。

我哪里做错了?:)

标签: phpregexpreg-split

解决方案


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

所以不确定逗号的事情,因为我没有看到它。

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

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

这需要:

  • 至少匹配一次的模式
  • 将它包装起来()使分隔符捕获工作,因为它只适用于那个
  • 添加没有空滴挥之不去的空项目(模式似乎不计入两个限制)

推荐阅读