从负值中删除前导零
Remove leading zeros from a negative value
我正在使用 ltrim()
函数从已修剪的字符串中删除前导零,但不幸的是负数条目也有效,因此我的解决方案不适用于此。
例如-
$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim($size2, 0));
产生输出 -
string(4) "10px" // Correct
string(7) "-0010px" // Incorrect
如何在保留 -
符号 的同时从负值 中删除前导零?
你为什么不 运行 ltrim 两次?
$string = "-0010xp";
$string = ltrim($string, '-');
$string = ltrim($string, 0);
echo $string;
ltrim 可以取任何字符。请参阅文档。
http://php.net/manual/en/function.ltrim.php
我想保留“-” 然后看 Steve B 的回答:
$string = "-00010px";
$string = preg_replace('/^(-)?(0+)/', '' , $string);
echo $string;
$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim(abs($size2), 0));
您可以定义一个函数 trimmer 来检查减号,将其删除,然后在删除零后将其添加回来。
然后您可以使用要从中去除零的任何字符串来调用它。
function trimmer($str) {
$is_neg = false;
if (substr($str, 0, 1) == '-') {
$is_neg = true;
$str = ltrim($str, '-');
}
$str = ltrim($str, 0);
if ($is_neg) {
$str = '-' . $str;
}
return $str;
}
echo trimmer("0010px");
echo trimmer("-0010px");
这将在修剪零后恢复“-”符号,我认为其他解决方案不会这样做。
想到的一个快速解决方案是匹配正则表达式并使用 preg_replace:
var_dump(preg_replace('/^(-)?(0+)/', '' , "-00010px"));
var_dump(preg_replace('/^(-)?(0+)/', '' , "00010px"));
ltrim 确实需要多个字符:
$string = ltrim($string, '-0');
这将从字符串的开头去除所有零和减号。
编辑:
如果你想保留减号,试试这样:
$string = ($string[0] == '-') ? '-'.ltrim(substr($string, 1), '0') : ltrim($string, '0');
preg_replace也是一个选项,但它通常比简单的字符串操作要慢得多。
另一种选择是floatval()
$val1 = '0010px';
$val2 = '-0010px';
echo floatval($val1) . 'px';
echo '<br>';
echo floatval($val2) . 'px';
输出:
10px
-10px
@Psaniko 的回答可能更有效率。并且你需要添加'px',如果它不仅是可能的后缀,这将是一个问题。
我正在使用 ltrim()
函数从已修剪的字符串中删除前导零,但不幸的是负数条目也有效,因此我的解决方案不适用于此。
例如-
$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim($size2, 0));
产生输出 -
string(4) "10px" // Correct
string(7) "-0010px" // Incorrect
如何在保留 -
符号 的同时从负值 中删除前导零?
你为什么不 运行 ltrim 两次?
$string = "-0010xp";
$string = ltrim($string, '-');
$string = ltrim($string, 0);
echo $string;
ltrim 可以取任何字符。请参阅文档。 http://php.net/manual/en/function.ltrim.php
我想保留“-” 然后看 Steve B 的回答:
$string = "-00010px";
$string = preg_replace('/^(-)?(0+)/', '' , $string);
echo $string;
$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim(abs($size2), 0));
您可以定义一个函数 trimmer 来检查减号,将其删除,然后在删除零后将其添加回来。
然后您可以使用要从中去除零的任何字符串来调用它。
function trimmer($str) {
$is_neg = false;
if (substr($str, 0, 1) == '-') {
$is_neg = true;
$str = ltrim($str, '-');
}
$str = ltrim($str, 0);
if ($is_neg) {
$str = '-' . $str;
}
return $str;
}
echo trimmer("0010px");
echo trimmer("-0010px");
这将在修剪零后恢复“-”符号,我认为其他解决方案不会这样做。
想到的一个快速解决方案是匹配正则表达式并使用 preg_replace:
var_dump(preg_replace('/^(-)?(0+)/', '' , "-00010px"));
var_dump(preg_replace('/^(-)?(0+)/', '' , "00010px"));
ltrim 确实需要多个字符:
$string = ltrim($string, '-0');
这将从字符串的开头去除所有零和减号。
编辑: 如果你想保留减号,试试这样:
$string = ($string[0] == '-') ? '-'.ltrim(substr($string, 1), '0') : ltrim($string, '0');
preg_replace也是一个选项,但它通常比简单的字符串操作要慢得多。
另一种选择是floatval()
$val1 = '0010px';
$val2 = '-0010px';
echo floatval($val1) . 'px';
echo '<br>';
echo floatval($val2) . 'px';
输出:
10px
-10px
@Psaniko 的回答可能更有效率。并且你需要添加'px',如果它不仅是可能的后缀,这将是一个问题。