ถ้าฉันมีสตริง
00020300504
00000234892839
000239074
ฉันจะกำจัด zeroes ชั้นนำได้อย่างไรเพื่อที่ฉันจะได้มีสิ่งนี้
20300504
234892839
239074
โปรดทราบว่าหมายเลขข้างต้นถูกสร้างแบบสุ่ม
ถ้าฉันมีสตริง
00020300504
00000234892839
000239074
ฉันจะกำจัด zeroes ชั้นนำได้อย่างไรเพื่อที่ฉันจะได้มีสิ่งนี้
20300504
234892839
239074
โปรดทราบว่าหมายเลขข้างต้นถูกสร้างแบบสุ่ม
คำตอบ:
$str = ltrim($str, '0');
(string)((int)"00000234892839")
(int) "00009384783473"
(หมายเลขสุ่ม) และผลลัพธ์ของฉันคือ 2147483647 ถ้าฉันโยนมันแบบลอยอย่างไรก็ตามดูเหมือนว่าจะใช้ได้ Strange
ไม่รู้ว่าทำไมผู้คนถึงใช้วิธีการที่ซับซ้อนเพื่อให้ได้สิ่งที่ง่าย! และ regex? ว้าว!
ที่นี่คุณไปวิธีที่ง่ายที่สุดและง่ายที่สุด (ดังที่อธิบายไว้ที่นี่: https://nabtron.com/kiss-code/ ):
$a = '000000000000001';
$a += 0;
echo $a; // will output 1
คล้ายกับข้อเสนอแนะอื่นยกเว้นจะไม่ลบล้างศูนย์ที่แท้จริง:
if (ltrim($str, '0') != '') {
$str = ltrim($str, '0');
} else {
$str = '0';
}
หรือตามที่แนะนำ (จาก PHP 5.3) ผู้ใช้สามารถใช้ตัวดำเนินการแบบย่อได้:
$str = ltrim($str, '0') ?: '0';
$str = ltrim($str, '0') ?: '0';
- ไม่มีการตัดขอบซ้ำซ้อน
คุณสามารถเพิ่ม "+" ในตัวแปรของคุณ
ตัวอย่าง:
$numString = "0000001123000";
echo +$numString;
มีการเสนอ Regex แล้ว แต่ไม่ถูกต้อง:
<?php
$number = '00000004523423400023402340240';
$withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
echo $withoutLeadingZeroes;
?>
ผลลัพธ์คือ:
4523423400023402340240
ความเป็นมาของ Regex: ^
สัญญาณเริ่มต้นของสตริงและ+
สัญญาณส่งสัญญาณมากกว่าหรือไม่มีสัญญาณก่อนหน้า ดังนั้น regex จึง^0+
จับคู่เลขศูนย์ทั้งหมดที่จุดเริ่มต้นของสตริง
preg_replace() expects at least 3 parameters, 2 given
ฉันไม่คิดว่า preg_replace คือคำตอบ .. เธรดเก่า แต่เพิ่งเกิดขึ้นเพื่อค้นหาสิ่งนี้ในวันนี้ ltrim และ (int) แคสติ้งเป็นผู้ชนะ
<?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
ฉันแก้ไขด้วยวิธีนี้
มันง่ายมาก ส่งสตริงเท่านั้นให้ลบการเริ่มต้นศูนย์เป็นสตริง
function removeZeroString($str='')
{
while(trim(substr($str,0,1)) === '0')
{
$str = ltrim($str,'0');
}
return $str;
}
Ajay Kumar เสนอecho ที่ง่ายที่สุด+ $ numString ฉันใช้สิ่งเหล่านี้:
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
จริง ๆ แล้วฟังก์ชันทางคณิตศาสตร์ใด ๆ จะใช้ตัวเลขจาก "สตริง" และปฏิบัติเช่นนั้น มันง่ายกว่า regex หรือฟังก์ชั่นเปรียบเทียบ ฉันเห็นสิ่งนั้นใน php.net จำไม่ได้ว่าอยู่ที่ไหน
สมมติว่าคุณต้องการให้ลบศูนย์อย่างน้อยสามศูนย์และตัวอย่างของคุณคือหนึ่งสตริง:
$test_str ="0002030050400000234892839000239074";
$fixed_str = preg_replace('/000+/','',$test_str);
คุณสามารถทำให้รูปแบบ regex เหมาะสมกับสิ่งที่คุณต้องการหากสมมติฐานของฉันปิด
ความช่วยเหลือนี้หรือไม่?
<br>
แท็กคั่นตัวเลข พวกเขาเป็นส่วนหนึ่งของสตริงของคุณหรือไม่