2011-12-02 14 views
59

मैं जावास्क्रिप्ट में रेगेक्स परीक्षण बनाने की कोशिश कर रहा हूं जो एक स्ट्रिंग का परीक्षण इन अक्षर शामिल करने के लिए:।

!$%^&*()_+|~-=`{}[]:";'<>?,./ 

अधिक जानकारी यदि आप इच्छुक :) एक बहुत अच्छा पासवर्ड बदलें आवेदन मैं पर काम कर रहा हूँ के लिए

यह कर रहे हैं मामले में आप ' यहां शेष कोड का रुचि है।

मेरे पास एक सारणी है जो पासवर्ड की आवश्यकताओं को सूचीबद्ध करती है और अंत उपयोगकर्ताओं के प्रकार के रूप में ई नया पासवर्ड, यह Regexes की एक सरणी का परीक्षण करेगा और संबंधित तालिका पंक्ति में एक चेकमार्क रखेगा यदि यह ... चेक आउट करता है :) मुझे इसे validation सरणी में 4 वें आइटम के स्थान पर जोड़ने की आवश्यकता है।

var validate = function(password){ 
    valid = true; 

    var validation = [ 
     RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
     RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
     !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
     !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7) 
    ] 

    $.each(validation, function(i){ 
     if(this) 
      $('.form table tr').eq(i+1).attr('class', 'check'); 
     else{ 
      $('.form table tr').eq(i+1).attr('class', ''); 
      valid = false 
     } 
    }); 

    return(valid); 

} 

हाँ, वहाँ भी सर्वर साइड सत्यापन इसी रहा है!

+4

यह काफी हास्यास्पद है कि आपके सवाल का जवाब विशेष वर्ण से बचने और फ़ॉरवर्ड स्लैश enclosing के अपवाद के साथ शीर्षक में निहित है – sciritai

+1

का प्रयोग क्यों न ' .addClass ("चेक") 'और' .removeClass ("चेक") '? और कोड में अगर कुछ (कुछ बोलेन == सत्य) 'कोड को हमेशा मुझे क्रिंग करता है। बस' अगर (कुछ बोलेयन) '। या, अभी तक बेहतर है, बस '$ ("। फॉर्म टेबल tr") करें। Eq (i + 1) .toggleClass ("चेक", !! यह); वैध = मान्य && !! यह; '। कोड समीक्षा के लिए – gilly3

+0

+1 @ gill3 thx- वास्तव में महान प्रतिक्रिया। मैंने अतीत में उन छोटी-छोटी विधियों का उपयोग किया है। – pixelbobby

उत्तर

119

इसके लिए नियमित अभिव्यक्ति वास्तव में सरल है। बस एक चरित्र वर्ग का उपयोग करें। हाइफ़न चरित्र वर्गों में एक विशेष चरित्र है, इसलिए इसे पहले होना चाहिए:

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/ 

आपको अन्य नियमित अभिव्यक्ति मेटाएक्टैक्टर्स से बचने की भी आवश्यकता है।

संपादित करें: हाइफ़न विशेष है क्योंकि इसका उपयोग वर्णों की एक श्रृंखला का प्रतिनिधित्व करने के लिए किया जा सकता है। इस चरित्र श्रेणी को इस श्रेणी के साथ सरलीकृत किया जा सकता है:

/[$-/:-?{-~!"^_`\[\]]/ 

तीन श्रेणियां हैं। '$' से '/', ':' to '?', और '{' to '~'। पात्रों के अंतिम स्ट्रिंग एक सीमा के साथ अधिक बस का प्रतिनिधित्व नहीं किया जा सकता:। "^ _` []

एक ACSII table चरित्र वर्गों के लिए सीमाओं को खोजने के लिए प्रयोग करें

+0

अक्षरों के अनुक्रम से बचने के लिए क्वांटिफ़ायर \ Q और \ E का उल्लेख क्यों नहीं किया गया है? – SerG

+0

इस समाधान को ढूंढने से पहले मैं चरित्र वर्ग बहिष्करण मार्ग नीचे जा रहा था: सबकुछ से मिलान करें लेकिन अल्फा, अंक, सफेद स्थान इत्यादि। –

+1

क्या यह सामान्य ज्ञान है कि हाइफ़न पहले आना है? मैंने दर्जनों एसओ उत्तर और रेगेक्स धोखा शीट पढ़ी हैं, यह मैंने पहली बार सुना है। आपके जवाब ने मुझे बहुत नाटक बचाया। धन्यवाद! –

-3

में किसी भी भाषा से सभी latters बदलें '। ए ', और यदि आप 0 करने के लिए उदाहरण के लिए सभी अंक इच्छा:।

return str.replace(/[^\[email protected][-`{-~]/g, "A").replace(/\d/g, "0"); 
+5

आप किस प्रश्न का उत्तर दे रहे हैं? – Toto

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