2012-07-12 19 views
14

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

"regexp=^[A-Za-z-0-99999999' 
+2

यह एक regex के लिए एक बहुत अस्पष्ट उद्देश्य है। सीमाएं क्या हैं - कौन से पात्रों की अनुमति है/अनुमति नहीं है? एक पते में व्यावहारिक रूप से कुछ भी शामिल हो सकता है। इसके अलावा, '0-99 999' का कोई प्रभाव नहीं पड़ेगा क्योंकि यह एक चरित्र वर्ग है - यह एक समय में एक चरित्र से मेल खाता है, इसलिए यह केवल '0-9' होना चाहिए। – Utkanos

+0

रेगेक्स या तो इस उद्देश्य के लिए बहुत विशिष्ट है, या बहुत ढीला है। आप केवल कुछ ऐसा देखने के लिए मान्य कर सकते हैं ** जैसे ** कोई पता या नहीं। – nhahtdh

उत्तर

20

डेम्स,

regex के साथ मान्य पते पर इस सवाल का जवाब देखें शामिल करने के लिए: regex street address match

टी वह समस्या है, सड़क के पते स्वरूपण में इतना भिन्न होते हैं कि उनके खिलाफ कोड करना मुश्किल है। यदि आप पते को प्रमाणित करने का प्रयास कर रहे हैं, तो यह पता लगाना कि कोई प्रारूप के आधार पर मान्य नहीं है, वह करना मुश्किल है। यह निम्न पते (253 एन चेरी सेंट), अपने ही स्वरूप के साथ कुछ भी वापसी होगी:

\d{1,5}\s\w.\s(\b\w*\b\s){1,2}\w*\. 

इस घर का नंबर, एक जगह, एक चरित्र की अवधि के द्वारा पीछा के लिए 1-5 अंक की अनुमति देता है (एन या एस के लिए), सड़क के नाम के लिए 1-2 शब्द, संक्षेप में समाप्त हुआ (जैसे सेंट या rd।)।

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

(-?) 

एक पानी का छींटा के लिए अनुमति देने के लिए जोड़ सकते हैं, लेकिन एक की आवश्यकता नहीं।

इसके अलावा, http://rubular.com/ रेगेक्स सीखने के लिए एक त्वरित और संवादात्मक तरीका है। उपरोक्त पते के साथ इसे आज़माएं।

2

मैंने सफलतापूर्वक उपयोग किया है;

Dim regexString = New stringbuilder 
    With regexString 
     .Append("(?<h>^[\d]+[ ])(?<s>.+$)|")    'find the 2013 1st ambonstreet 
     .Append("(?<s>^.*?)(?<h>[ ][\d]+[ ])(?<e>[\D]+$)|") 'find the 1-7-4 Dual Ampstreet 130 A 
     .Append("(?<s>^[\D]+[ ])(?<h>[\d]+)(?<e>.*?$)|") 'find the Terheydenlaan 320 B3 
     .Append("(?<s>^.*?)(?<h>\d*?$)")     'find the 245e oosterkade 9 
    End With 

    Dim Address As Match = Regex.Match(DataRow("customerAddressLine1"), regexString.ToString(), RegexOptions.Multiline) 

    If Not String.IsNullOrEmpty(Address.Groups("s").Value) Then StreetName = Address.Groups("s").Value 
    If Not String.IsNullOrEmpty(Address.Groups("h").Value) Then HouseNumber = Address.Groups("h").Value 
    If Not String.IsNullOrEmpty(Address.Groups("e").Value) Then Extension = Address.Groups("e").Value 

रेगेक्स परिणाम खोजने का प्रयास करेगा, यदि कोई नहीं है, तो यह अगले विकल्प पर जाता है। यदि कोई परिणाम नहीं मिला है, तो मौजूद 4 प्रारूपों में से कोई भी नहीं।

7

यदि आपके ऊपर उपरोक्त पते के लिए कोई निश्चित प्रारूप नहीं है, तो मैं पते में उपयोग नहीं किए जाने वाले प्रतीकों को समाप्त करने के लिए रेगेक्स अभिव्यक्ति का उपयोग करूंगा (जैसे विशेष सिबमोल - & (% # $^।) परिणाम होगा:

[A-Za-z0-9'\.\-\s\,] 
1

Regex काम के इस प्रकार के लिए एक बहुत बुरा विकल्प है एक वेब सेवा या कोई पता डेटाबेस या एक उत्पाद है जो पता डेटा के बजाय साफ कर सकते हैं खोजने की कोशिश करें

संबंधित।। :

4

बस Serzas 'जवाब में जोड़ने के लिए (के बाद से पर्याप्त प्रतिनिधि नहीं है। टिप्पणी करने के लिए)। वर्णमाला और संख्याओं को प्रभावी रूप से शब्दों के लिए \ w द्वारा प्रतिस्थापित किया जा सकता है। इसके अतिरिक्त एस्ट्रोफ़े, कॉमा, अवधि और हाइफ़न को बैकस्लैश की आवश्यकता नहीं है। मेरी आवश्यकता में फ्रंट और बैक स्लेश भी शामिल हैं ताकि अंततः \/और साथ में व्हाइटस्पेस हो।मेरे लिए काम कर regex, जैसे था:

pattern: "[\w',-\\/.\s]" 
1

सरल पते का सत्यापन

^[#.0-9a-zA-Z\s,-]+$ 

जैसे के लिए नियमित अभिव्यक्ति पता मिलान मामले के लिए

#1, North Street, Chennai - 11 

उदा।

\ d + [] (:? [एक-zA-Z0-9 .-] []) + (?: एवेन्यू पता के लिए मामला

$1, North Street, Chennai @ 11 
+1

स्क्रीनशॉट पोस्ट करने के बजाय यहां टेक्स्ट पेस्ट करें। – bfontaine

+0

क्षमा करें। सरल पता सत्यापन ^ [#। 0-9a-zA-Z \ s, -] + $ E.g. के लिए नियमित अभिव्यक्ति। पता मैच केस # 1, नॉर्थ स्ट्रीट, चेन्नई - 11 और E.g. पते के लिए केस $ 1, नॉर्थ स्ट्रीट, चेन्नई @ 11 – AJK

+0

धन्यवाद। इस पाठ को अपने उत्तर में जोड़ने के लिए कृपया संपादन बटन का उपयोग करें। – bfontaine

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