एक स्ट्रिंग में सभी प्रमुख शून्य कैसे निकालें


163

अगर मेरे पास एक तार है

00020300504
00000234892839
000239074

मैं अग्रणी शून्य से कैसे छुटकारा पा सकता हूं ताकि मेरे पास केवल यही हो

20300504
234892839
239074

ध्यान दें कि उपरोक्त संख्या अनियमित रूप से उत्पन्न हुई थी।


क्या ये तीन अलग-अलग तार हैं, या प्रत्येक संख्या को अलग करने वाली नई लाइनों के साथ एक स्ट्रिंग है? मैंने देखा कि आपके प्रश्न को संपादित करते समय आपके पास <br>संख्याओं को अलग करने वाले टैग थे ; क्या वे वास्तव में आपके तार का हिस्सा हैं?
एसेक्स

जवाबों:


458

ltrim:

$str = ltrim($str, '0');

2
कैवते $ स्ट्र: = '0'। इस जवाब के आधार पर, मेरे जवाब में संबोधित किया गया।
माइक वियर

क्यों चीजों को ओवरकॉम्पलेट करें? और माइक यह $ str + = 0 है; : यहां बताए गए nabtron.com/kiss-code
नबील खान

@NabeelKhan इस प्रश्न का उत्तर नहीं दिया जाएगा, जो स्ट्रिंग को पूर्णांक में बदलने के लिए नहीं कहता है। यह इस तरह के एक महान समाधान क्यों नहीं है के लिए Svisstack के जवाब पर टिप्पणी देखें।
लोन्सोमेडे

@lonesomeday आपको उनके सवाल को ध्यान से पढ़ना चाहिए जहां उन्होंने उल्लेख किया है: "ध्यान दें कि ऊपर की संख्या अनियमित रूप से उत्पन्न हुई थी।" इसलिए वे पहले से ही पूर्णांक हैं :)
नबील खान

1
सावधानी: यह '0' को ''
Goose

12
(string)((int)"00000234892839")

मैंने सिर्फ एक (int) "00009384783473"(यादृच्छिक संख्या) की कोशिश की और मेरा परिणाम 2147483647 था। अगर मैंने इसे एक फ्लोट के रूप में रखा, लेकिन यह ठीक काम करने लगता है। अजीब
जेम्सहॉलस

मैनुअल का कहना है कि "एक पूर्णांक का आकार प्लेटफ़ॉर्म-निर्भर है, हालांकि अधिकतम दो बिलियन का सामान्य मूल्य (जो कि 32 बिट्स पर हस्ताक्षर किए गए हैं)" है
लामेलर

1
अजीब नहीं है। PHP में Integers 2 ^ 31 तक जाते हैं, जो 2147483647 है। किसी भी बड़ी संख्या के लिए, आपको lonesomeday के स्ट्रिंग-आधारित समाधान का उपयोग करना होगा।
AWM

1
फ्लोटिंग के लिए कास्टिंग काम करने के लिए प्रकट हो सकती है, लेकिन कुछ बिंदु पर आपको राउंडऑफ़ त्रुटियां मिलेंगी।
AWM

1
लूप स्टेटमेंट का उपयोग करके स्ट्रिंग के प्रत्येक का मूल्यांकन करने के विचार के बारे में कैसे, कि जब यह एक गैर शून्य अंक (या स्ट्रिंग) के लिए हो जाता है, तो यह उस अंक का सूचकांक प्राप्त करेगा और सभी पूर्ववर्ती शून्य को छोड़ देगा और फिर शुरू होने वाले स्ट्रिंग को प्रतिध्वनित करेगा पहले गैर शून्य मान के साथ ..
जेराल्ड

10

पता नहीं लोग इतनी सरल बात को प्राप्त करने के लिए इतने जटिल तरीकों का उपयोग क्यों कर रहे हैं! और रेगेक्स? वाह!

यहां आपको सबसे आसान और सबसे आसान तरीका है (जैसा कि यहां बताया: https://nabtron.com/kiss-code/ ):

$a = '000000000000001';
$a += 0;

echo $a; // will output 1

2
यह एक सरल समाधान की तरह लगता है, लेकिन यह अन्य उत्तरों की तरह स्ट्रिंग के किसी भी आकार को संभालता नहीं है। आप एक स्ट्रिंग से पूर्णांक में परिवर्तित कर रहे हैं और फिर एक स्ट्रिंग के रूप में वापस - केवल स्ट्रिंग को छोटा करने के लिए सरल।
माइक वियर

1
दिलचस्प है, लेकिन मुझे नहीं पता कि यह प्रकार रूपांतरणों के साथ सबसे अच्छा समाधान है या नहीं।
जोंथनथनबेल

1
कृपया ऐसा न करें ... यही कारण है कि PHP को एक बुरा प्रतिनिधि मिलता है
Dan F.

9

एक अन्य सुझाव के समान, वास्तविक शून्य को नहीं छोड़ना चाहिए:

if (ltrim($str, '0') != '') {
    $str = ltrim($str, '0');
} else {
    $str = '0';
}

या जैसा कि सुझाव दिया गया था (PHP 5.3 के रूप में), शॉर्टहैंड टर्नरी ऑपरेटर का उपयोग किया जा सकता है:

$str = ltrim($str, '0') ?: '0'; 

1
$str = ltrim($str, '0') ?: '0'; - कोई अनावश्यक ट्रिम कॉल नहीं।
मिकमैकुसा


3

रेगेक्स पहले से ही प्रस्तावित था, लेकिन सही ढंग से नहीं:

<?php
    $number = '00000004523423400023402340240';
    $withoutLeadingZeroes = preg_replace('/^0+/', '', $number)
    echo $withoutLeadingZeroes;
?>

आउटपुट तब है:

4523423400023402340240

रेगेक्स पर पृष्ठभूमि: ^स्ट्रिंग की शुरुआत के +संकेत और संकेत पूर्ववर्ती संकेत के अधिक या कोई भी संकेत नहीं देते हैं। इसलिए, रेगेक्स ^0+एक स्ट्रिंग की शुरुआत में सभी जीरो से मेल खाता है।


preg_replace() expects at least 3 parameters, 2 given
तरंग 10

2

मुझे नहीं लगता कि 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

यदि आप रेगेक्स की शुरुआत में ^ ऑपरेटर जोड़ते हैं, तो यह एक मान्य समाधान है।
बारज

0

इस तरह से फिक्स्ड।

यह बहुत सरल है। केवल एक स्ट्रिंग पास करें इसकी स्ट्रिंग की शून्य शुरुआत को हटा दें।

function removeZeroString($str='')
{
    while(trim(substr($str,0,1)) === '0')
    {
        $str = ltrim($str,'0');
    }
    return $str;
}

-1

अजय कुमार ने सबसे सरल प्रतिध्वनि + $ सुन्न प्रदान की; मैं इनका उपयोग करता हूं:

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

वास्तव में कोई भी गणित फ़ंक्शन "स्ट्रिंग" से संख्या लेगा और ऐसा व्यवहार करेगा। यह किसी भी रेगेक्स या तुलनात्मक कार्यों की तुलना में बहुत सरल है। मैंने देखा कि php.net में, याद नहीं है कि कहाँ है।


-2

मान लें कि आप तीन या अधिक शून्य का रन-वे हटाना चाहते हैं और आपका उदाहरण एक स्ट्रिंग है:

    $test_str ="0002030050400000234892839000239074";
    $fixed_str = preg_replace('/000+/','',$test_str);

यदि आप मेरी मान्यताओं से दूर हैं, तो आप रेगेक्स पैटर्न को फिट बना सकते हैं।

यह मदद?


1
गलत है, क्षमा करें। यह स्ट्रिंग के बीच से '000' को भी काट देगा।
फ़िलिप ओवर्टोनिंगर रिंगो नोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.