2011-11-17 21 views
18

शुभ दिन जावास्क्रिप्ट में 10 से नीचे किसी भी संख्या के सामने एक शून्य पहले जोड़ें करने के लिए,कैसे का उपयोग कर Regexp

वहाँ एक Regex है कि मैं किसी भी संख्या 10 से कम है कि इससे पहले कि एक 0 पहले जोड़ें करने के लिए इस्तेमाल कर सकते हैं है?

मैं एक तारीख पार्सिंग लाइब्रेरी, टर्नरी या अगर/अन्य समाधान की तलाश नहीं कर रहा हूं। (उम्मीद)

var currentDate = new Date(), 
    stringDate = currentDate.getFullYear() + "-" + currentDate.getMonth() + "-" + currentDate.getDate() + " " + currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds(); 

    alert(stringDate); //2011-10-17 10:3:7 

मैं एक रेगुलर एक्सप्रेशन है कि मैं stringDate पर लागू हो सकते चाहते प्राप्त करने के लिए 2011-10-17 10:03:07

आपको बहुत बहुत धन्यवाद होगा!

+2

1 महीने –

+0

@ जोनास एच, +1 जोड़ने के लिए मत भूलना, मैंने यह भी ध्यान नहीं दिया है। अजीब तिथि वस्तु। – Cybrix

उत्तर

62

बस अग्रणी 0 हर बार जोड़ें, फिर slice(-2) का उपयोग पिछले दो वर्ण प्राप्त करने के लिए है, तो जैसे:

('0' + currentDate.getHours()).slice(-2) 
+0

यह रेगेक्स समाधान नहीं है लेकिन यह काम कर रहा है! और यह एक टर्नरी समाधान के बाद बहुत साफ है। – Cybrix

+1

महान कामकाज! –

+0

@Cybrix आपको जवाब स्वीकार करना चाहिए। – FailedDev

3

आप उस के लिए regex जरूरत नहीं है। आप एक सरल पैड समारोह अपने आप बना सकते हैं:

function pad(n) { 
    if (n < 10) 
     return "0" + n; 
    return n; 
} 

alert(pad(8)); 
alert(pad(11)); 

http://jsfiddle.net/DwnNG/

+0

छोटा: 'वापसी एन <10? "0" + n: n; ' – davee44

1

कैसे के बारे में:

x.replace(/^(\d)$/, "0$1"); 
+0

' 2011-10-17 10: 3: 7'.replace (/^(\ d) $ /, "0 $ 1") == '2011-10-17 10: 03: 07'' – Cybrix

+0

यह मेरे परीक्षण के साथ काम नहीं कर रहा है। – Cybrix

+0

@Cybrix: 'currentDate.getHours()' द्वारा 'x' बदलें और – Toto

0

यही काम करना चाहिए (इसमें एक त्रिगुट ऑपरेटर है, लेकिन यह भी एक regex^^)

stringDate.replace(/\d+/g, function(m) { 
    return parseInt(m, 10) < 10 ? "0" + m : m; 
}); 
0

मैं एलेक्स के रास्ते को पसंद करता हूं, लेकिन यदि आप वास्तव में regex रास्ता चाहते हैं, आप की कोशिश कर सकते हैं:

"2011-10-10 10:2:27".replace(/:(?=[^0](?::|$))/g, ":0"); 
+0

पर यह लगभग काम करता है। 10 से नीचे संख्याओं के साथ काम करना लेकिन अन्यथा: '2011-10-17 10: 04 9: 037' – Cybrix

+0

@ साइबिक्स नए के बारे में कैसे? –

0

आप करते हैं यह सब regex समाधान अपने एक लाइनर लिए तैयार हैं? अपने पूरे स्ट्रिंग में

पास ... और यह एक 0.

"2011-10-17 10:3:7" 
.replace(/(^|[^0-9])([0-9])(?=($|[^0-9]))/ig, function ($0, $1) { 
    return $0[0] + '0' + $0[1]; 
}); 

//returns "2011-10-17 10:03:07" 

यह इतना आसान किया जाएगा यदि जावास्क्रिप्ट समर्थित lookbehind-वक्तव्य दिये एकल अंक और उन्हें पैड से मेल खाएगी।

4

निम्न फ़ंक्शन आपको स्ट्रिंग के साथ या उसके भीतर किसी संख्या के लिए न्यूनतम लंबाई घोषित करने की अनुमति देगा और इसे उचित लंबाई बनाने के लिए शून्य के साथ पैड करेगा।

var PrependZeros = function (str, len, seperator) { 
    if(typeof str === 'number' || Number(str)){ 
     str = str.toString(); 
     return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str: str; 
    } 
    else{ 
     for(var i = 0,spl = str.split(seperator || ' '); i < spl.length; spl[i] = (Number(spl[i])&& spl[i].length < len)?PrependZeros(spl[i],len):spl[i],str = (i == spl.length -1)?spl.join(seperator || ' '):str,i++); 
     return str; 
    } 
}; 

एक कम गुप्त संस्करण

var PrependZeros = function (str, len, seperator) { 
    if (typeof str === 'number' || Number(str)) { 
     str = str.toString(); 
     return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str : str; 
    } 
    else { 
     var spl = str.split(seperator || ' ') 
     for (var i = 0 ; i < spl.length; i++) { 
      if (Number(spl[i]) && spl[i].length < len) { 
       spl[i] = PrependZeros(spl[i], len) 
      } 
     } 
     return spl.join(seperator || ' '); 
    } 
}; 

उदाहरण चाहने वालों के लिए:

PrependZeros("1:2:3",2,":"); // "01:02:03" 
PrependZeros(1,2); // "01" 
PrependZeros(123,2); // "123" 
PrependZeros("1 2 3",3); // "001 002 003" 
PrependZeros("5-10-2012",2,"-"); //"05-10-2012" 
+0

मुझे उस बुराई, बुराई, लूप के लिए बुराई के लिए आपको कम करना है। – samspot

+1

मैंने बुराई बुराई लूप के बिना एक संस्करण रखने के लिए मेरी प्रतिक्रिया अद्यतन की ... मैं शायद ही कभी कोड लिखता हूं जो गुप्त है। –

0

% 0 {लंबाई} =>% 05 => 1 = 00001, 2 = 00002 ,. .. 55 = 00055, ...

1

अब मैं पुराना हूं, लेकिन मैंने w3c पर उपयोग किया गया यह सरल और साफ समाधान देखा और बस साझा करना पड़ा यह कहीं कहीं

var hours = currentDate.getHours(); 
(hours < 10 ? '0' : '') + hours; 
+0

फ़ायरफ़ॉक्स का उपयोग करके यह काम नहीं कर रहा है ... – tremor

+0

@tremor यह अजीब बात है कि आप फ़ायरफ़ॉक्स का किस संस्करण का उपयोग कर रहे हैं? टर्नरी ऑपरेटर सभी ब्राउज़रों में व्यापक रूप से समर्थित है। मोज़िला आधिकारिक दस्तावेज़ों पर यहां देखें https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator#compat-desktop। – John

+0

पी। मैंने इसे फ़ायरफ़ॉक्स में कोई समस्या नहीं के साथ भाग लिया। – John