2009-04-18 17 views
5

वर्तमान में मेरे पास नियमित अभिव्यक्ति में कुछ सैद्धांतिक रूप से पृष्ठभूमि है, लेकिन मैंने लगभग कभी उनका उपयोग नहीं किया है।इनपुट सत्यापन के लिए नियमित अभिव्यक्ति का उपयोग करने के लिए एक अच्छा अभ्यास है?

मैं सामान्य इनपुट सत्यापन के लिए कुछ कक्षाएं विकसित करने की कोशिश कर रहा हूं, और मैं नियमित अभिव्यक्तियों के उपयोग के बिना विधियों को लिख रहा हूं। मैंने हाल ही में this जेफ के लेख को पढ़ा है, और अब मैं सोच रहा हूं कि मुझे उनके अंदर regexp शामिल करने के कुछ तरीकों को दोबारा करना चाहिए।

मैंने सोचा था कि नियमित अभिव्यक्तियों का इस्तेमाल पार्सर्स और अन्य किसी भी तरह के अनुप्रयोगों के लिए फ्रंट-एंड बनाने के लिए किया जाता था, लेकिन स्पष्ट रूप से उनका उपयोग उससे कहीं अधिक होता है।

मुझे एहसास है कि नियमित अभिव्यक्तियों के साथ सभी सत्यापन नहीं किए जा सकते हैं या नहीं, लेकिन क्या वे इनपुट मान्य करने के लिए एक अच्छा अभ्यास कर रहे हैं?

उत्तर

5

नियमित अभिव्यक्ति पैटर्न के खिलाफ पाठ मिलान करने का एक तरीका है। रेगेक्स का उपयोग किये बिना वही काम करने के अन्य तरीके हैं। आपको नियमित अभिव्यक्तियों के बारे में सोचना नहीं चाहिए जो आपको अपने कोड में शामिल करना चाहिए। जो भी उपकरण सबसे अच्छा काम करता है उसका प्रयोग करें।

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

2

मुझे पता है कि नहीं सभी सत्यापन या नियमित अभिव्यक्ति के साथ किया जा सकता है किया जाना चाहिए

आप बिल्कुल सही है कि एक पर हैं, लेकिन चीजों की आवश्यकता है कि वास्तव में एक निश्चित तरीके से (उदाहरण के सामाजिक के लिए होने के लिए सुरक्षा संख्या, फोन नंबर (कुछ हद तक) और ईमेल), नियमित अभिव्यक्तियों का उपयोग करके सहायक हो सकता है।

लेकिन उन पर भरोसा न करें। उदाहरण के लिए मेरे पास एक बहुत अच्छी ईमेल नियमित अभिव्यक्ति जांच है, लेकिन मेरे पास मिलान करने के लिए स्पष्ट रूप से फर्जी डोमेन (example.com और कुछ अन्य जिन्हें मैंने अपने डेटाबेस (ज्यादातर स्थानीय सामान) में देखा है) की एक सूची भी है।

1

हां - नियमित अभिव्यक्ति इनपुट सत्यापन के लिए बहुत अच्छी तरह से काम करती है। हालांकि, अक्सर इन चीजों को जितना संभव हो उतना दूर करने के लिए अन्य तरीकों के रूप में - या कभी-कभी विशेष सत्यापनकर्ता वस्तुओं को भी एक बहुत अच्छा विचार है।

याद रखें कि नियमित अभिव्यक्ति अक्सर बहुत सारी परेशानी का परिचय दे सकती है, लेकिन पूरी तरह से, इनपुट सत्यापन एक ऐसा मामला है जहां वे काफी बिना शर्त चमकते हैं।

0

मुझे नहीं पता कि मैं इसे सबसे अच्छा अभ्यास कहूंगा, लेकिन मैं निश्चित रूप से अन्य चीजों के साथ ईमेल एड्रेस और ओप जैसी चीजों के सत्यापन के लिए रेगेक्स का उपयोग करता हूं। यदि सबसे अच्छा अभ्यास नहीं है, तो यह निश्चित रूप से एक आम प्रथा है।

4

हाँ!

नियमित अभिव्यक्ति आमतौर पर आपको एक सुंदर ठोस इनपुट सत्यापन बनाने देती है जो कि बहुत ही कम समय में काफी पठनीय है।

कुछ जो सही काम करता है, रखरखाव योग्य है और आपको मेरी किताबों में अन्य चीजों पर अच्छा होने देता है।

हमेशा के रूप में, सामान्य ज्ञान लागू करें और यदि कोई रेगेक्स नौकरी के लिए एक खराब उपकरण है, तो इसका उपयोग न करें।

4

regexp सत्यापन का उपयोग करना एक अच्छा विचार प्रदान की जाती है कि आप अधिक से अधिक besic नियमित अभिव्यक्ति को लागू करने में बंद शाखा नहीं है:

आप अपने आप को मिल जाए संभावित जटिल संरचनाओं मान्य जैसे Michael Ash एक तारीख को सत्यापित करने के अपने प्रयासों के तहत करता है आप पीटा पथ से दूर कर रहे हैं और मुसीबत के लिए पूछ रहा:

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

आपका कोड रखरखाव समस्याओं भुगतना होगा।

1

आपके प्रश्न का उत्तर वास्तव में आपके कोड के उद्देश्य पर निर्भर करता है। हां, नियमित अभिव्यक्तियां बहुत अच्छी हैं और मैं पिछले सभी उत्तरों (जो मैंने पढ़ा है) के साथ सहमत हूं।

नियमित अभिव्यक्ति का उपयोग करना, कुछ आदानों लेकिन शायद क्या आपको याद है क्या अच्छा कोड बनाता है और सही स्थानों में नियमित अभिव्यक्ति लागू करने की आवश्यकता को मान्य करने के लिए एक, काम जल्दी और sleak तरीका है। मैं लेख आपको पोस्ट पढ़ा है, और मैंने सोचा था कि विषय के बारे में सही ढंग से नियमित अभिव्यक्ति का उपयोग कर यानी सिर्फ इसलिए कि आप जानते हैं कि यह ऊपर टाइप करने के लिए त्वरित किया जाएगा एक समाधान के लिए उपयोग नहीं है और यह काम करेगा, लेकिन में के बारे में अधिक था बारी गैर-पठनीय, लंबा और भयानक दिखने वाला कोड उत्पन्न करता है।

मैं इसे जो लिखा है उससे नहीं लेगा कि नियमित अभिव्यक्तियां "बुरी आदत" हैं। मुझे लगता है, वह सिर्फ इतना भरना चाहता था कि कभी-कभी आप डिज़ाइन पर विचार करने में कुछ और मिनट बिता सकते हैं और कार्यान्वित करने के लिए एक बेहतर अवधारणा के साथ आ सकते हैं या बस निष्कर्ष निकाल सकते हैं कि नियमित अभिव्यक्तियां उस अवधारणा हैं!

0

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

एक बार पर्याप्त नहीं है। "मान्य" की विभिन्न डिग्री हैं।

0

इनपुट आप सत्यापित कर रहें एक नियमित रूप से भाषा में है, तो आप एक रेगुलर एक्सप्रेशन यह मान्य करने के लिए सही उपकरण है।

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