2012-06-12 16 views
10

मैं जानना चाहता हूं कि उदाहरण के लिए स्ट्रिंग को जांचने का सबसे अच्छा तरीका क्या है (मेल, पासवर्ड .. ईटीसी)।जावास्क्रिप्ट: परीक्षण बनाम exec

/^...$/i.exec(a) 

बनाम

/^...$/i.test(a) 
  • कार्यकारी रिटर्न मूल्य
  • परीक्षण सच

परीक्षण:

// 1° way 
var mail = req.body.mail; 
if(check(mail)){ 

कार्यकारी:

// 1° way 
var mail = req.body.mail; 
if(check(mail)){ 

// 2° way 
var mail = check(req.body.mail); 
if(mail){ 

कार्यकारी या परीक्षण? और क्या संख्या (यदि 1 ° या 2 डिग्री कार्यकारी)

समाधान

परीक्षण इस मामले के लिए बेहतर है।

  • यह निश्चित रूप से तेज़ होगा।

लेकिन सबसे महत्वपूर्ण

  • परीक्षण उसके सभी कार्यों प्रदर्शन करती है। जबकि exec प्रदर्शन नहीं किया, क्योंकि अधिक किया जा सकता है, लेकिन हमें इसकी आवश्यकता नहीं है।
  • जैसा कि कहा गया है मैटियास Buelens, isMail() का उपयोग करके यह अधिक तार्किक है: एक ईमेल है: हाँ या नहीं। जबकि exec: एक ईमेल है: ईमेल या शून्य -> ​​wtf? lol
+0

'सर्वश्रेष्ठ तरीका' से आपका क्या मतलब है? – j08691

+0

1। आप जो करने की कोशिश कर रहे हैं उस पर निर्भर करता है। क्या आपको मिलान/कैप्चरिंग समूहों की आवश्यकता है और ऐसे में यह जांचने के लिए मान्य है कि क्या आपकी प्रदत्त स्ट्रिंग रेगेक्स से मेल खाती है या नहीं? इसके अलावा, दूसरा प्रश्न वरीयता आधारित है, इसका एक ही परिणाम होगा। आपको चुनना चाहिए कि आप/आपकी टीम के लिए कौन सा पठनीय और रखरखाव योग्य है। –

+0

दो समाधान हैं, अलग-अलग हैं, इसलिए मुझे लगता है कि उनमें से एक सर्वश्रेष्ठ है ** संपादित करें ** @ Fabrício Matté: बस मान्य करें। हां, मुझे लगता है कि पहला तरीका सबसे अच्छा है क्योंकि अधिक पठनीय उत्तर तर्क है। (आपके लिए;)) –

उत्तर

15

यदि आपको नियमित अभिव्यक्ति से मेल खाने के लिए केवल इनपुट स्ट्रिंग का परीक्षण करने की आवश्यकता है, तो RegExp.test सबसे उपयुक्त है। यह आपको boolean रिटर्न वैल्यू देगा जो इसे शर्तों के लिए आदर्श बनाता है।

RegExp.exec आपको सभी कैप्चर समूहों और मिलान किए गए इंडेक्स के साथ एक सरणी जैसे वापसी मूल्य देता है। इसलिए, यह तब उपयोगी होता है जब आपको मैच के बाद कब्जे वाले समूहों या इंडेक्स के साथ काम करने की आवश्यकता होती है। (it behaves a bit differentString.match की तुलना में वैश्विक संशोधक /g)

अंत में, इससे गति या दक्षता में कोई फर्क नहीं पड़ता। नियमित अभिव्यक्ति का अभी भी मूल्यांकन किया जाएगा और सभी मिलान करने वाले समूह और अनुक्रमणिका वैश्विक RegExp ऑब्जेक्ट के माध्यम से उपलब्ध होंगी (हालांकि यह अत्यधिक अनुशंसा की जाती है कि आप वापसी मूल्यों का उपयोग करें)।

if परीक्षण के लिए, यह केवल व्यक्तिगत स्वाद का मामला है।एक अर्थपूर्ण नाम (जैसे isEmail) के साथ एक चर के लिए नियमित अभिव्यक्ति परीक्षण के परिणाम को असाइन करना पठनीयता में सुधार कर सकता है, लेकिन इसके अलावा वे दोनों ठीक हैं।

+3

यह एक अच्छा स्पष्टीकरण है, भले ही कुछ त्रुटियां हैं। "RegExp.exec' आपको ** सभी ** कैप्चर समूहों और मिलान किए गए इंडेक्स के साथ एक सरणी जैसी वापसी मान देता है।" ज़रुरी नहीं। यह इंडेक्स '[0] 'और उसके बाद के इंडेक्स में इसके बाद के कैप्चरिंग समूहों में पहले मैच के साथ एक सरणी लौटाएगा। यह सभी मैचों/कैप्चरिंग समूहों को वापस नहीं करता है, केवल अपने सभी कैप्चरिंग समूहों के साथ पहला मैच। हालांकि, आप इसके माध्यम से इसके माध्यम से पुन: प्रयास करते हैं एक 'जबकि' लूप जो आपके द्वारा प्रदान किए गए एमडीएन लिंक में दिखाए गए अनुसार regex ऑब्जेक्ट में स्वचालित रूप से 'lastIndex' प्रॉपर्टी को संग्रहीत करता है। –

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