javascript - बिल्कुल 5 नंबर और एक वैकल्पिक स्थान से मेल खाने के लिए रेगेक्स




regex validation (5)

आप इसे आधे में विभाजित कर सकते हैं:

var input = '0000 ';

if(/^[^ ]* [^ ]*$/.test(input) && /^\d{5,6}$/.test(input.replace(/ /, '')))
  console.log('Match');

जावास्क्रिप्ट में इनपुट की जांच करने के लिए हाल ही में मुझे एक नियमित अभिव्यक्ति बनाने की आवश्यकता थी I यह इनपुट 5 या 6 वर्ण लंबा हो सकता है और उसमें बिल्कुल 5 संख्याएं और एक वैकल्पिक स्थान होना चाहिए, जो स्ट्रिंग में कहीं भी हो सकता है। मैं बिल्कुल भी नहीं जानता हूं और फिर भी मैं एक बेहतर तरीके से तलाश करने की कोशिश कर रहा हूं, इसके साथ समाप्त हुआ:

(^\d{5}$)|(^ \d{5}$)|(^\d{5} $)|(^\d{1} \d{4}$)|(^\d{2} \d{3}$)|(^\d{3} \d{2}$)|(^\d{4} \d{1}$)  

यह मुझे क्या चाहिए, इसलिए स्वीकृत इनपुट हैं (यदि 0 कोई संख्या है)

'00000'  
' 00000'  
'0 0000'  
'00 000'  
'000 00'  
'0000 0'  
'00000 '

मुझे संदेह है कि यह एकमात्र तरीका है कि regex के साथ इस तरह के मिलान को प्राप्त करना है, लेकिन मुझे इसे क्लीनर तरीके से करने का कोई तरीका नहीं मिला है। तो मेरा सवाल यह है, यह कैसे बेहतर लिखा जा सकता है?

धन्यवाद।

संपादित करें:
तो, यह संभव है! टॉम लॉर्ड्स का उत्तर मुझे नियमित अभिव्यक्ति के लिए आवश्यक था, इसलिए मैंने इसे मेरे प्रश्न का सही उत्तर मान लिया।

हालांकि, मैंने इस प्रश्न को पोस्ट करने के तुरंत बाद, मुझे एहसास हुआ कि मैं सही नहीं सोच रहा था, क्योंकि प्रोजेक्ट में हर दूसरे इनपुट को आसानी से 'मान्ययोग्य' था, मैं तुरंत सोच रहा था कि मैं इसके साथ इस एक को मान्य कर सकता हूं।

बाहर निकल जाता है मैं यह कर सकता था:

const validate = function(value) {
    const v = value.replace(/\s/g, '')
    const regex = new RegExp('^\\d{5}$');
    return regex.test(v);
}  

शांत उत्तर और विचारों के लिए धन्यवाद! :)

संपादित करें 2: मैं एक संभावित महत्वपूर्ण विवरण का उल्लेख करना भूल गया, जो कि यह इनपुट सीमित है, इसलिए उपयोगकर्ता केवल 6 वर्ण तक दर्ज कर सकता है। मैं क्षमाप्रार्थी हूं।


मेरा सुझाव है कि पहले पांच नंबर ^\d{5}$ लिए जाँच करें या छह वर्णों के बीच ^(?=\d* \d*$) संख्याओं के बीच एक एकल स्थान के लिए आगे देखें .{6}$

उन आंशिक अभिव्यक्ति का संयोजन मिलाकर ^\d{5}$|^(?=\d* \d*$).{6}$ :

let regex = /^\d{5}$|^(?=\d* \d*$).{6}$/;

console.log(regex.test('00000'));   // true
console.log(regex.test(' 00000'));  // true
console.log(regex.test('00000 '));  // true
console.log(regex.test('00 000'));  // true
console.log(regex.test('  00000')); // false
console.log(regex.test('00000  ')); // false
console.log(regex.test('00  000')); // false
console.log(regex.test('00 0 00')); // false
console.log(regex.test('000 000')); // false
console.log(regex.test('0000'));    // false
console.log(regex.test('000000'));  // false
console.log(regex.test('000 0'));   // false
console.log(regex.test('000 0x'));  // false
console.log(regex.test('0000x0'));  // false
console.log(regex.test('x00000'));  // false

वैकल्पिक रूप से आंशिक अभिव्यक्तियों से अलग रूप से मेल खाते हैं:

/^\d{5}$/.test(input) || input.length == 6 && /^\d* \d*$/.test(input)

यहां काम करने के लिए एक सरल regex है:

^(?=[\d ]{5,6}$)\d*\s?\d*$

स्पष्टीकरण:

^ स्ट्रिंग की शुरुआत में स्थिति पर जोर देती है

सकारात्मक लुकहेड (? = [\ D] {5,6} $)

दावा करें कि नीचे रेगेक्स मेल खाता है

नीचे दी गई सूची में मौजूद एक एकल अक्षर से मेल करें [\ d] {5,6}

{5,6} क्वांटिफायर - जितना संभव हो उतना बार 5 से 6 बार के बीच मेल खाता है, आवश्यकतानुसार लौटाना (लालची)

\ d एक अंक से मेल खाता है ([0- 9] के बराबर) अक्षर से अक्षर से मेल खाता है (केस संवेदनशील)

$ स्ट्रिंग के अंत में स्थिति को सक्रिय करता है \ d * एक अंक से मेल खाता है ([0- 9] के बराबर)

  • क्वांटिफायर - शून्य और असीमित समय के बीच मिलान, जितनी बार संभव हो, आवश्यकतानुसार वापस लौटाना (लालची)

\ s किसी भी श्वेत स्थान के चरित्र से मेल खाता है ([\ r \ n \ t \ f \ v] के बराबर)

\ d * एक अंक से मेल खाता है ([0- 9] के बराबर)

  • क्वांटिफायर - शून्य और असीमित समय के बीच मिलान, जितनी बार संभव हो, आवश्यकतानुसार वापस लौटाना (लालची)

$ स्ट्रिंग के अंत में स्थित स्थिति का दावा करता है


string="12345 ";
if(string.length<=6 && string.replace(/\s/g, '').length<=5 && parseInt(string,10)){
  alert("valid");
}

आप बस लंबाई की जांच कर सकते हैं और यदि यह एक वैध संख्या है ...


यह कैसे मैं regex बिना यह कर सकता है:

string => [...string].reduce(
    ([spaces,digits], char) =>
        [spaces += char == ' ', digits += /\d/.test(char)],
    [0,0]
).join(",") == "1,5";




validation