मुझे टेक्स्ट इनपुट के रूप में उपयोगकर्ता से एक ऑस्ट्रेलियाई फोन नंबर प्राप्त हो रहा है। स्ट्रिंग 10 वर्ण लंबी होगी और 04 से शुरू होगी। मैं स्ट्रिंग को विभाजित करना चाहता हूं क्योंकि उपयोगकर्ता इसे दर्ज कर रहा है, इसलिए यह 0411 111 111 जैसा निकला।

मेरा वर्तमान समाधान value.toString().replace(/^(04\d{2})(\d{3})(\d{3})$/, $1 $2 $3) है

यह समाधान स्ट्रिंग को सही ढंग से विभाजित करता है, लेकिन केवल तभी जब उपयोगकर्ता ने पूरे 10 वर्ण दर्ज किए हों। मैं चाहता हूं कि पहले 4 अक्षर दर्ज किए जाने के बाद इसे विभाजित करना शुरू हो जाए यानी 0411 1 आदि।

1
Tristan 3 अप्रैल 2018, 04:25

3 जवाब

सबसे बढ़िया उत्तर

मैं थोड़ा सा समाधान निकालने में कामयाब रहा। यह बिल्कुल वैसा नहीं है जैसा मैं लक्ष्य कर रहा था, लेकिन यह काम करता है।

value.toString() .replace(/^(04\d{2})(\d{3})(\d{3})$/, $1 $2 $3) .replace(/[\s-]+$/, "")

यह प्रत्येक कीप्रेस पर सफेद स्थान को हटा देता है (हर बार रेगेक्स कहा जाता है) और इसे पुन: स्वरूपित करता है।

0
Tristan 3 अप्रैल 2018, 04:38

नीचे की तरह कुछ पर विचार करें जो वर्तमान में इनपुट मोबाइल नंबर की लंबाई की जांच करता है और फिर लंबाई के आधार पर एक अलग रेगेक्स लागू करता है:

var mobileInput = document.getElementById('mobile');
mobileInput.addEventListener('keyup', foo);

function foo() {
  var unformatted = mobileInput.value;
  var pattern, replacer;
  if (unformatted.length < 5) {
    pattern = /(04\d{2})/;
    replacer = '$1 ';
  } else if (unformatted.length < 9) {
    pattern = /(04\d{2})\s{1}(\d{3})/;
    replacer = '$1 $2 ';
  } else {
    pattern = /^(04\d{2})(\d{3})(\d{3})$/;
    replacer = '$1 $2 $3';
  }
  var formatted = unformatted.replace(pattern, replacer);
  mobileInput.value = formatted; 
}
<input type="text" id="mobile" />
0
Robin Mackenzie 3 अप्रैल 2018, 01:55

यहां एक लाइनर है जो आपके सटीक उपयोग के मामले में काम करेगा:

var results = "0411111111".split(/(?=\d{6}$)|(?=\d{3}$)/);
console.log(results);

हम आपकी स्ट्रिंग को एक रेगेक्स पर विभाजित कर सकते हैं जो 4 अंकों के बाद बिंदु और 7 अंकों के बाद बिंदु को लक्षित करता है।

0
Tim Biegeleisen 3 अप्रैल 2018, 01:28