Câu trả lời:
$str = ltrim($str, '0');
(string)((int)"00000234892839")
(int) "00009384783473"
(số ngẫu nhiên) và kết quả của tôi là 2147483647. Tuy nhiên, nếu tôi sử dụng nó như một cái phao, thì nó có vẻ hoạt động tốt. Lạ
Không biết tại sao mọi người lại sử dụng các phương pháp phức tạp để đạt được một điều đơn giản như vậy! Và regex? Ồ
Ở đây bạn đi, cách dễ nhất và đơn giản nhất (như được giải thích ở đây: https://nabtron.com/kiss-code/ ):
$a = '000000000000001';
$a += 0;
echo $a; // will output 1
Tương tự như một đề xuất khác, ngoại trừ sẽ không xóa sạch số 0 thực tế:
if (ltrim($str, '0') != '') {
$str = ltrim($str, '0');
} else {
$str = '0';
}
Hoặc như đã được đề xuất (kể từ PHP 5.3), toán tử tốc ký có thể được sử dụng:
$str = ltrim($str, '0') ?: '0';
$str = ltrim($str, '0') ?: '0';
- không có cuộc gọi cắt dự phòng.
bạn có thể thêm "+" vào biến của mình,
thí dụ :
$numString = "0000001123000";
echo +$numString;
Regex đã được đề xuất, nhưng không chính xác:
<?php
$number = '00000004523423400023402340240';
$withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
echo $withoutLeadingZeroes;
?>
đầu ra là:
4523423400023402340240
Bối cảnh trên Regex: ^
tín hiệu bắt đầu của chuỗi và +
dấu hiệu báo hiệu nhiều hơn hoặc không có dấu hiệu nào trước đó. Do đó, regex ^0+
khớp với tất cả các số 0 ở đầu chuỗi.
preg_replace() expects at least 3 parameters, 2 given
Tôi không nghĩ preg numplace là câu trả lời .. chủ đề cũ nhưng chỉ tình cờ tìm kiếm điều này ngày hôm nay. ltrim và (int) casting là người chiến thắng.
<?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
Tôi đã sửa với cách này.
nó rất đơn giản. chỉ vượt qua một chuỗi loại bỏ bắt đầu của chuỗi.
function removeZeroString($str='')
{
while(trim(substr($str,0,1)) === '0')
{
$str = ltrim($str,'0');
}
return $str;
}
Ajay Kumar cung cấp tiếng vang đơn giản nhất + $ numString; Tôi sử dụng những thứ này:
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
Trên thực tế, bất kỳ hàm toán học nào cũng sẽ lấy số từ "chuỗi" và xử lý nó như vậy. Nó đơn giản hơn nhiều so với bất kỳ hàm regex hoặc hàm so sánh nào. Tôi thấy điều đó trong php.net, đừng nhớ ở đâu.
Giả sử bạn muốn loại bỏ ba số không trở lên và ví dụ của bạn là một chuỗi:
$test_str ="0002030050400000234892839000239074";
$fixed_str = preg_replace('/000+/','',$test_str);
Bạn có thể làm cho mẫu regex phù hợp với những gì bạn cần nếu các giả định của tôi bị tắt.
Giúp này?
<br>
các thẻ phân tách các số; chúng thực sự là một phần của chuỗi của bạn?