2012-10-14 13 views
5

निम्नलिखित 35 वर्णों से बना इनपुट के माध्यम से सबमिट किए गए आइटम कोड को चेक करता है जिसमें अक्षरों ए-एफ और संख्या 0-9, साथ ही तीन डैश ("-") शामिल हैं। अच्छी तरह से 16FA860F-E86A457B-A28A238B-2ACA6E3Dयदि लंबाई शून्य है

//Checks the item code to see if it meets requirements 
if($("#input").val().length > 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().length < 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too short. Be sure to include dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/([^A-Fa-f0-9-]+)/gm)) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> contains invalid characters.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

else { 
//Rest of my code 
} 

निम्नलिखित काम करता है, अगर किसी आइटम कोड 35 वर्ण लंबा है, लेकिन कोई रिक्तियां शामिल होती है: एक वैध आइटम कोड का एक उदाहरण इस होगा। यदि इसमें 1 या 2 डैश हैं, तो यह कोड इसे पकड़ता है, लेकिन यदि इसमें 0 है, तो यह बस लटकता है और कुछ भी नहीं करता है। मैंने बस सबकुछ के बारे में कोशिश की है, लेकिन यह पता लगाना प्रतीत नहीं होता कि समाधान क्या हो सकता है। चूंकि लंबाई रिक्त है, यह सिर्फ hangs.The बात यह है कि किसी भी तरह बदलाव किया जाना चाहिए यह है:

else if($("#input").val().match(/[-]/g, "").length > 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 
else if($("#input").val().match(/[-]/g, "").length < 3) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please include 3 dashes.<br>"); 

    $("#ise").each(function(){ 
    this.reset(); 
    }); 
} 

मुझे यकीन है कि समाधान के लिए एक आसान से एक है, लेकिन मैं स्टंप्डया हूँ।

संपादित करें: यहां बताया गया है कि सीएसएस को छोड़कर, मुझे अधिकांश भाग के लिए सब कुछ कैसे मिला है। http://jsfiddle.net/86KcG/1/

+4

ऐसा लगता है कि आप इस तरह से अधिक जटिल हैं। प्रारूप हमेशा एक ही है? यही है, हमेशा एक ही स्थिति में '-' हैं? एक नियमित अभिव्यक्ति नौकरी करेगी ... –

+0

यदि लंबाई 35 है तो किस स्थिति में लात मारनी चाहिए ?? – charlietfl

+0

@ माइकल हां, लेकिन मैं अभी यह जांचने के बारे में चिंतित नहीं हूं, हालांकि यह अच्छा होगा। मैं यह सुनिश्चित करने पर ध्यान केंद्रित कर रहा हूं कि कोड में हमेशा तीन डैश होते हैं, और यदि नहीं है, तो एक त्रुटि संदेश दें।यह काम करता है अगर केवल 1 या 2 है, लेकिन यदि कोई नहीं है, तो यह कुछ भी नहीं करता है। –

उत्तर

1

आप

/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/ 

कहाँ^और $ इनपुट से मेल शुरू और समाप्त, और वर्ण वायुसेना के समूहों और 0-9 बाधा के साथ कि एक पानी का छींटा पर इस तरह किसी भी तरह एक regex का उपयोग करके अपने कोड ठीक कर सकते हैं समूह एएफ या 0-9 के कम से कम एक चरित्र से अलग किया जाता है।

35 अक्षरों के लिए लंबाई जांच के साथ इस चेक को जोड़कर आपका कोड काम करता है।

//Checks the item code to see if it meets requirements 
if($("#input").val().length != 35) { 
    $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is too long/short.<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
else if(!(/^[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+\-[A-F0-9]+$/.test($("#input").val()))) { 
    $("#errorLogContent").prepend("Insert some dashes and make sure the required pattern...<br>"); 

    $("#ise").each(function(){ 
     this.reset(); 
    }); 
} 
+0

यह मेरे लिए सबसे अच्छा काम करता है। nnnnnn के समाधान ने मुझे एक त्रुटि दे दी, शायद मेरी गलती हालांकि। हालांकि मैं nnnnnn regex का उपयोग कर समाप्त हो गया। –

0

.length कभी भी null नहीं होगा। match() से वापसी null होगी यदि कोई मैच नहीं था, तो यदि आप length संपत्ति की जांच करने का प्रयास करते हैं तो null में संपत्तियों की संपत्ति नहीं है, इसलिए आपको उस पर परीक्षण करने की आवश्यकता है, लेकिन length स्वयं हमेशा 0 ऊपर या undefined से एक पूर्णांक होगा)।

तो आप कह सकते हैं:

else { 
    var matches = $("#input").val().match(/[-]/g); // note: match() only takes one parameter 
    if (matches != null && matches.length > 3) { 
     $("#errorLogContent").prepend("The item code <font color='#FFFFFF'>" + itemCode + "</font> is an invalid format. Please only use 3 dashes.<br>"); 

     $("#ise").each(function(){ 
      this.reset(); 
     }); 
    } 
} 

अपने कम से कम 3 परीक्षण के लिए आप कहेंगे:

if (matches === null || matches.length < 3) 

... जब कोई मैचों (null की वापसी) कर रहे हैं के लिए पूरा करने के लिए , या कुछ मैचों लेकिन 3.

यदि सही मान हमेशा 16FA860F-E86A457B-A28A238B-2ACA6E3D के पैटर्न का पालन करता है, यानी 8 अक्षरों या संख्याओं के समूह डैश द्वारा अलग किए जाते हैं, तो आप कर सकते हैं इस:

if (!/^[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}-[0-9A-F]{8}$/i.test($("#input").val()) { 
    // invalid, do something... 
} 

regex .test() methodtrue या false कि क्या आपूर्ति की स्ट्रिंग का मिलान नहीं हुआ पर निर्भर करता है देता है।

संबंधित मुद्दे