2009-08-31 17 views
13

मैं एक टेक्स्ट बॉक्स में दर्ज की गई तारीख को सत्यापित करने का प्रयास कर रहा हूं। टेक्स्टबॉक्स पर एक इनपुट मास्क है जो xx/xx/xxxx के इनपुट को मजबूर करता है। मैं एक नियमित अभिव्यक्ति सत्यापनकर्ता का उपयोग करने की कोशिश कर रहा हूं ताकि यह लागू किया जा सके कि एक सही तिथि दर्ज की गई है। मैं मूल रूप से RegEx में कुशल नहीं हूँ। मेरे सहकर्मी ने इसे इंटरनेट पर पाया लेकिन मैं वास्तव में यह नहीं बता सकता कि यह क्या कर रहा है।सी # एक तारीख को मान्य करने के लिए नियमित अभिव्यक्ति?

क्या यह सही दिखता है? ज्यादा जटिल लगता है ...

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$) 

किसी को भी एक कम जटिल अभिव्यक्ति अनिवार्य रूप से मैं क्या जरूरत है कि के बारे में पता है?

+0

इसे [इस] (http://stackoverflow.com/questions/669741/date-regex) पोस्ट में संबोधित किया गया है। देखें कि यह मदद करता है। – JYelton

उत्तर

34

System.DateTime namespace में उपलब्ध विधियों में से किसी एक का उपयोग क्यों न करें? आप सत्यापन को पूरा करने के लिए DateTime.TryParse() (संपादित कर सकते हैं:DateTime.TryParseExact() शायद सही सुझाव है) का उपयोग कर सकते हैं।

+1

सहमत हैं, फ्रेमवर्क इस पर वजन खींचने दें। –

+4

और डेटटाइम। TrojanParseExact() आपकी सटीक आवश्यकताओं के आधार पर अधिक उपयुक्त हो सकता है। –

+0

क्या होगा यदि मैं यह सुनिश्चित करना चाहता हूं कि बटन पर तारीख सही है तो क्लिक करें? – Muhammedh

20

आप DateTime.TryParseExact उपयोग कर सकते हैं:

DateTime dt; 

bool isValid = DateTime.TryParseExact(
    "08/30/2009", 
    "MM/dd/yyyy", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out dt); 
-1

यह वास्तव में एक जवाब नहीं है, लेकिन आप DateTime.Parse या DateTime.TryParse उपयोग नहीं कर सका जाँच करने के लिए उस तारीख सही है?

या तो उस या यकीन है कि यह डेटा है कि दिनांक समय नहीं है में प्रवेश के लिए असंभव है बनाने के लिए एक DateTime नियंत्रण का उपयोग करें। इस विषय पर वहां बहुत सारे जावास्क्रिप्ट हैं।

3

केटेनटेन को कोई समस्या थी। उनके सहकर्मी ने रेगेक्स का उपयोग करने का सुझाव दिया। Kettenbach तो दो समस्या थी।

के रूप में अन्य लोगों ने कहा, एक कस्टम validator पर DateTime.TryParse या DateTime.TryParseExact का उपयोग करें और अपने आप को बुरा सपना है कि regex :)

+0

Regexes स्वाभाविक रूप से बुरा नहीं हैं। हालांकि, उन्हें समझदारी से इस्तेमाल करने की आवश्यकता है। वे टेक्स्ट पार्सिंग समस्याओं के एक निश्चित वर्ग के लिए बहुत अच्छा काम करते हैं। – TrueWill

+3

ओह मैंने कभी नहीं कहा कि वे बुरा थे, प्रति कहते हैं ... लेकिन वे बिल्लियों के साथ एक स्तर पर हैं। – Sk93

+0

कृपया ऊपर दिए गए कथन को जेमी ज़विंस्की को श्रेय दें। – jason

-1

अंतिम जवाब वास्तव में ऐसा करने का सही तरीका है बचाने के। DateTime.TryParse का प्रयोग करें।

उदाहरण:

DateTime dt; 
if(DateTime.TryParse(Textbox1.Text,out dt)) 
{ 
Label1.Text = "Invalid date format"; 
} 
+1

मैं इसके लिए वास्तविक कोड लिख रहा था। – wwd

+1

पार्स सफल होने पर TryParse वास्तव में सच हो जाता है, इसलिए अमान्य दिनांक प्रारूप की आपकी अधिसूचना उस स्थिति के अन्य में होनी चाहिए। –

3

ऊपर नियमित अभिव्यक्ति dd/mm/yyyy प्रारूप के लिए सही है। अभिव्यक्ति

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$) 
+1

मेरा मानना ​​है कि सवाल "क्या एक बेहतर तरीका है" ... – iMortalitySX

7

इस दिनांक स्वरूप dd/mm/yyyy

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$ 
+4

बिल्कुल नहीं - आपको प्रारंभिक शून्य वैकल्पिक बनाने की आवश्यकता है या यह एकल अंकों के मूल्यों जैसे 2/12/2012 से मेल नहीं खाएगा। ^ (0? [1-9] | [12] [0-9] | 3 [01]) [- /। ](0[1-9 ]|1[012 ])[- /।] (1 9 | 20) \ d \ d $ – 5arx

3

के लिए उपयोग करने के लिए एक विकल्प के रूप सही रेगुलर एक्सप्रेशन होगा, आप RegularExpressionValidator के बजाय CompareValidator का उपयोग कर सकते है। यह इस प्रकार है:

<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>

+0

बहुत अच्छा विचार। आपने मुझे रेगेक्स का उपयोग करने से बचाया है। – Cyberherbalist

0

हम एक CustomValidator का उपयोग करें और ओवरराइड TryParse जाँच करने के लिए ServerValidate विधि का उपयोग कर सकते हैं!

0
([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9] 

dd/mm/yyyy के लिए (वर्ष 1000 से 2999 के लिए किया जा सकता है)

या

(([0] [1-9] | [2] [0-9] | [3] [0-1] | [1-9] | [1] [0-9])/([0] [1-9] | [1] [0-2] | [1-9])/([1-2] [0-9] [0-9] [0-9] | [0-9] [0-9]))

जिसमें डी/एम/वाई (उदाहरण 1)/12/82)

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