Odpowiedzi:
$str = ltrim($str, '0');
(string)((int)"00000234892839")
(int) "00009384783473"
(losową liczbę) i mój wynik to 2147483647. Jeśli jednak rzucę go jako pływaka, wydaje się, że działa dobrze. Dziwne
Nie wiem, dlaczego ludzie używają tak złożonych metod, aby osiągnąć tak prostą rzecz! A regex? Łał!
Proszę bardzo, najłatwiej i najprostszy sposób (jak wyjaśniono tutaj: https://nabtron.com/kiss-code/ ):
$a = '000000000000001';
$a += 0;
echo $a; // will output 1
Podobnie jak w przypadku innej sugestii, z wyjątkiem tego, że nie zatrze rzeczywistego zera:
if (ltrim($str, '0') != '') {
$str = ltrim($str, '0');
} else {
$str = '0';
}
Lub jak sugerowano (od PHP 5.3), można użyć skróconego operatora trójskładnikowego:
$str = ltrim($str, '0') ?: '0';
$str = ltrim($str, '0') ?: '0';
- brak zbędnego wywołania trymowania
możesz dodać „+” do swojej zmiennej,
przykład:
$numString = "0000001123000";
echo +$numString;
Regex został już zaproponowany, ale nie poprawnie:
<?php
$number = '00000004523423400023402340240';
$withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
echo $withoutLeadingZeroes;
?>
wynik jest wtedy:
4523423400023402340240
Podstawowe informacje o Regex: ^
sygnały początku łańcucha i +
znak nie sygnalizują więcej lub żadnego znaku poprzedzającego. Dlatego wyrażenie regularne ^0+
dopasowuje wszystkie zera na początku ciągu.
preg_replace() expects at least 3 parameters, 2 given
Nie sądzę, że preg_replace jest odpowiedzią ... stary wątek, ale tak się złożyło, że szukałem tego dzisiaj. ltrim i (int) casting wygrywa.
<?php
$numString = "0000001123000";
$actualInt = "1123000";
$fixed_str1 = preg_replace('/000+/','',$numString);
$fixed_str2 = ltrim($numString, '0');
$fixed_str3 = (int)$numString;
echo $numString . " Original";
echo "<br>";
echo $fixed_str1 . " Fix1";
echo "<br>";
echo $fixed_str2 . " Fix2";
echo "<br>";
echo $fixed_str3 . " Fix3";
echo "<br>";
echo $actualInt . " Actual integer in string";
//output
0000001123000 Origina
1123 Fix1
1123000 Fix2
1123000 Fix3
1123000 Actual integer in tring
Jestem naprawiony w ten sposób.
to jest bardzo proste. przekazuj tylko łańcuch, usuwając zerowy początek łańcucha.
function removeZeroString($str='')
{
while(trim(substr($str,0,1)) === '0')
{
$str = ltrim($str,'0');
}
return $str;
}
Ajay Kumar oferuje najprostsze echo + $ numString; Używam tych:
echo round($val = "0005");
echo $val = 0005;
//both output 5
echo round($val = 00000648370000075845);
echo round($val = "00000648370000075845");
//output 648370000075845, no need to care about the other zeroes in the number
//like with regex or comparative functions. Works w/wo single/double quotes
Właściwie każda funkcja matematyczna pobierze liczbę z „ciągu znaków” i tak ją potraktuje. Jest to znacznie prostsze niż jakiekolwiek wyrażenie regularne lub funkcje porównawcze. Widziałem to na php.net, nie pamiętam gdzie.
Zakładając, że chcesz usunąć trzy lub więcej zer, a Twój przykład to jeden ciąg:
$test_str ="0002030050400000234892839000239074";
$fixed_str = preg_replace('/000+/','',$test_str);
Możesz dopasować wzorzec wyrażenia regularnego do tego, czego potrzebujesz, jeśli moje założenia są błędne.
Ta pomoc?
<br>
tagi oddzielające liczby; czy faktycznie są częścią twojego sznurka?