Удалить ведущие нули из отрицательного значения

Я использую ltrim() функция для удаления начальных нулей из уже урезанной строки, но, к сожалению, отрицательные записи также допустимы, и поэтому мое решение не работает для этого.

Например —

$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim($size2, 0));

Производит вывод —

string (4) «10px» // Правильно
string (7) «-0010px» // Неверно

Как я могу удалить ведущие нули от отрицательного значения сохраняя - условное обозначение?

2

Решение

Итрим принимает несколько символов:

$string = ltrim($string, '-0');

Это удалит все нули и знаки минуса с начала вашей строки.

РЕДАКТИРОВАТЬ:
Если вы хотите сохранить знак минус, попробуйте что-то вроде этого:

$string = ($string[0] == '-') ? '-'.ltrim(substr($string, 1), '0') : ltrim($string, '0');

preg_replace также является опцией, но обычно она намного медленнее простых строковых операций.

3

Другие решения

Одно быстрое решение, которое приходит на ум, — это сопоставление с регулярным выражением и использование preg_replace:

var_dump(preg_replace('/^(-)?(0+)/', '$1' , "-00010px"));
var_dump(preg_replace('/^(-)?(0+)/', '$1' , "00010px"));
1

Вы можете определить триммер функции, чтобы проверить наличие знака минус, удалить его и добавить обратно после удаления нулей.

Затем вы можете просто вызвать это с любой строкой, с которой вы хотите удалить нули.

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");

Это восстановит знак «-» после обрезки нулей, что, как я думаю, не делают другие решения.

1

Почему бы тебе просто не запустить Литрима дважды?

$string = "-0010xp";
$string = ltrim($string, '-');
$string = ltrim($string, 0);
echo $string;

Итрим может принять любого персонажа. Смотрите документацию.
http://php.net/manual/en/function.ltrim.php

Если вы хотите оставить «-», то увидите ответ Стива Б:

$string = "-00010px";
$string = preg_replace('/^(-)?(0+)/', '$1' , $string);
echo $string;
1
$size1 = "0010xp";
$size2 = "-0010px";
var_dump(ltrim($size1, 0));
var_dump(ltrim(abs($size2), 0));
0

Другой вариант floatval()

$val1 = '0010px';
$val2 = '-0010px';

echo floatval($val1) . 'px';
echo '<br>';
echo floatval($val2) . 'px';

Выход:

10px
-10px

@Psaniko ответ может быть более эффективным, хотя. И вам нужно добавить «px», что будет проблемой, если это не только возможный суффикс.

0
По вопросам рекламы [email protected]