2011-12-29 13 views
12

मैं कुछ ऐसा करने की कोशिश कर रहा हूं जो मैंने सोचा था कि करना बहुत आसान होगा, जो एक नियमित अभिव्यक्ति से मेल करके कुछ वर्णों को स्ट्रिंग को प्रतिबंधित करना है।.match() नियमित अभिव्यक्ति के साथ शून्य

var value = 'FailureStr1ng'; 
var type = 'ALPHA'; 
var regex = null; 

switch(type) { 
    case 'ALPHA': 
     regex = '^[a-zA-Z]+$'; 
     break; 
    case 'NUMERIC': 
     regex = '^[0-9]+$'; 
     break; 
    case 'ALPHANUMERIC': 
     regex = '^[a-zA-Z0-9]+$'; 
     break; 
} 

return value.match(regex); 

किसी कारण के लिए, जब मिलान का उपयोग यह हमेशा null देता है। क्या इसे ठीक करने का कोई तरीका है, या ऐसा करने के लिए एक बेहतर तरीका है?

नोट: यहां कोड बहुत बड़ा कोड का एक स्निपेट है, और बदले में मूल्य और प्रकार चर को आमतौर पर किसी अन्य विधि द्वारा परिभाषित किया जाता है।

+2

यह शून्य हो जाता है क्योंकि आपके पास स्ट्रिंग में '1' है इसलिए यह मेल नहीं खाता है। इसे एक स्ट्रिंग स्ट्रिंग में बदलना उस स्ट्रिंग को देता है। http://jsfiddle.net/GLVAj/ –

उत्तर

27

आप RegExp.test चाहते हैं, जो मैच को पुनर्प्राप्त करने के बजाय एक मैच के लिए मूल्य का परीक्षण करता है। अपने मौजूदा कोड के साथ, इसका मतलब यह होगा:

if(!new RegExp(regex).test(value)){ 
    alert('Your string was invalid.'); 
} 

हालांकि, यह, तार के बजाय RegExp शाब्दिक उपयोग करने के लिए बेहतर होगा के रूप में वे और अधिक कुशल और स्पष्ट हैं और कम होने का खतरा त्रुटि के लिए कर रहे हैं:

var value = 'FailureStr1ng'; 
var type = 'ALPHA'; 
var regex = null; 

switch(type) { 
    case 'ALPHA': 
     regex = /^[a-zA-Z]+$/; 
     break; 
    case 'NUMERIC': 
     regex = /^[0-9]+$/; 
     break; 
    case 'ALPHANUMERIC': 
     regex = /^[a-zA-Z0-9]+$/; 
     break; 
} 

if(!regex.test(value)) { 
    alert('Your string was invalid.'); 
} 

और भी बेहतर, एक शब्दकोश का उपयोग करें:

var expressions = { 
    ALPHA: /^[a-zA-Z]+$/, 
    NUMERIC: /^[0-9]+$/, 
    ALPHANUMERIC: /^[a-zA-Z0-9]+$/ 
}; 

if(!expressions[type].test(value)) { 
    alert('Your string was invalid.'); 
} 
+3

धन्यवाद! पूरी तरह से काम करना जैसे ही स्टैक ओवरफ्लो मुझे सही जवाब देता है। – MichaelH

+0

मैं एकल उद्धरण के अंदर रेगेक्स पैटर्न डाल रहा था और यह मेरा मुद्दा था ...: डी) –

7

Regex, /, नहीं ' से घिरा किया जाना चाहिए ताकि जावास्क्रिप्ट प्रकार रेगे के एक चर बनाता है एक्स, प्रकार स्ट्रिंग के नहीं। तो उदाहरण के लिए, अपने अल्फा मामले के लिए, आप

regex = /^[a-zA-Z]+$/; 

.match उपयोग के बारे में अधिक जानकारी के लिए MDN's page on .match देखें होनी चाहिए।

+0

धन्यवाद, मैं इसे जाने दूंगा। – MichaelH

1

आपका कोड ऐसा लगता है कि यह function { ... } के अंदर है। क्या आप return कुछ भी कर रहे हैं? यदि नहीं, तो आपको null वापस मिल रहा है ...

इसके अलावा, regexes स्लेश (/.../) से घिरे हुए हैं, उद्धरण नहीं।

+0

मैंने अभी कोड को ठीक कर दिया है, मेरा मतलब था कि value.match (regex) शून्य लौट रहा था। समारोह नहीं – MichaelH

+0

किसी फ़ंक्शन से लौटाया गया मान जो कुछ भी वापस नहीं करता है वह 'अपरिभाषित' है, न कि 'शून्य'। –

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