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()
。并将小数点强制为实际点。不知何故,我不知道为什么,它把小数点变成了逗号。但是只有在做数学的时候...
我有一个问题。我想缩放存储在值中的一些 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()
。并将小数点强制为实际点。不知何故,我不知道为什么,它把小数点变成了逗号。但是只有在做数学的时候...