2009-03-24 8 views
13

मुझे नियमित अभिव्यक्ति की आवश्यकता है जो पैटर्न से मेल खाती है या खाली है।क्या नियमित अभिव्यक्ति पैटर्न से मेल खाती है या खाली हो जाती है?

अभी मैं एक अभिव्यक्ति ...

"\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x" 

... जो यूएस के फ़ोन नंबर से मेल खाता है। हालांकि, यह स्ट्रिंग के लिए मान्य है जिसे मैं रिक्त होने का परीक्षण कर रहा हूं। यदि स्ट्रिंग में इसका कोई मूल्य है, तो यह अभिव्यक्ति से मेल खाना चाहिए।

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

इसी अभिव्यक्ति में इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?

स्पष्टीकरण: मैं माइक्रोसॉफ्ट से सत्यापन आवेदन ब्लॉक में RegexValidator का उपयोग कर रहा हूं। इसका उपयोग करने का एक उदाहरण निम्नानुसार है:

[StringLengthValidator(0, 100, MessageTemplate = "Email must be between {3} and {5}")] 
[RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate = "Valid Email Required.")] 
public string EmailAddress 
{ 
    get { return _EmailAddress; } 
    set { SetValue<string>(ref _EmailAddress, value); } 
} 

यही कारण है कि मुझे एक अभिव्यक्ति में होने का समाधान चाहिए।

+0

आपके रेगेक्स के अंत में/x क्या है? पर्ल या PHP में इसका मतलब फ्री-स्पेसिंग मोड होगा, लेकिन .NET उस वाक्यविन्यास का उपयोग नहीं करता है। –

+0

आह .. वास्तव में नहीं जानते। मैंने इसे किसी साइट से कहीं हटा लिया है। मैं इसे हटा दूंगा और देख सकता हूं कि इससे मदद मिलती है या नहीं। –

उत्तर

29

माता-पिता में पूरे रेगेक्स को लपेटें और रखें? अंत में:

(\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x)? 
+0

एक आकर्षण की तरह काम किया। मुझे पता था कि यह इस तरह कुछ आसान होगा। :) –

+2

वास्तव में ... यह सही काम नहीं करता है। पिछला प्रश्न चिह्न रेगेक्स को क्षमा करने के लिए प्रतीत होता है। उदाहरण के लिए, 555-1234 अब मैच होगा लेकिन यह नहीं होना चाहिए। –

+0

अपने मूल regex कार्यों को मानते हुए, आप कोशिश कर सकते हैं: \ B | \\ (? \ D {3} \\)? [- \ s।]? \ D {3} [- \ s।] \ D {4 }/x जो "खाली स्ट्रिंग" होना चाहिए या आपका regex –

1

कोशिश (?:<your_regex>)? के साथ अपने रेगुलर एक्सप्रेशन से लपेटकर।

1

इस प्रयास करें:

@"^(?:(\()?\d{3}(?(1)\)|[-\s.])\d{3}[-\s.]\d{4})?$" 

(?(1)\)|[-\s.]) हिस्सा एक सशर्त निर्माण है। यह कहता है "अगर वहां एक '(' शुरुआत में (जिसे हम जानते हैं क्योंकि समूह # 1 कुछ मेल खाता है), यहां '' 'से मेल खाता है, अन्यथा एक हाइफ़न, व्हाइटस्पेस या डॉट से मेल खाता है।" और (?:...)? में पूरी चीज़ को लपेटने से यह एक खाली स्ट्रिंग से मेल खा सकता है, जैसा कि केविन ने कहा था; अगर यह आपके लिए काम नहीं करता है, तो आपने माता-पिता में से एक को गलत स्थान दिया होगा (या शायद बैकस्लाश में से एक)।

मैंने परीक्षण उद्देश्यों के लिए ^ और $ एंकरों को जोड़ा; एक सत्यापनकर्ता नियंत्रण में उन्हें जरूरत नहीं होनी चाहिए।

+0

का उपयोग नहीं करता, उत्सुकता से, आपका रेगेक्स पूरी तरह से व्यक्त करने वाली ट्रैकिंग साइट को क्रैश करता है (http://www.nvcc.edu/home/drodgers/ceu/resources/test_regexp.asp)।हालांकि, +1 क्योंकि सामान्य विचार काम करता है। –

+0

क्या आप जानते हैं कि वह साइट .NET regex इंजन का उपयोग करती है? यह यहां ठीक काम करता है: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –

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

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