2015-03-27 7 views
6

में डेट प्रारूप का मिलान करने के लिए रेगेक्स का उपयोग करना रेगेक्स YYYYMMDD प्रारूप में स्ट्रिंग में वैध तिथियों से मेल खाना चाहिए। उदाहरण के लिए, aaa_20150327_bbb मिलान किया जाना चाहिए लेकिन aaa_20150229_bbb नहीं क्योंकि 2015 एक लीप वर्ष नहीं है।yyyymmdd

केवल से पर विचार करने की आवश्यकता है।

+3

यह नहीं जा रहा है यदि यह regex के साथ एक छलांग वर्ष नहीं है तो '2/2 9 'को बाहर करने के लिए संभव हो सकता है। कम से कम एक रास्ते में नहीं। तथ्य के बाद आपको इसे पार करना होगा। क्या \ \ d {8} 'में कोई समस्या है? या कम से कम '20 \ डी {2} [01] \ d [0123] \ d'? –

+0

@ जोवेंग आप किस भाषा का उपयोग कर रहे हैं? सी ++ में अंतर्निहित करने के लिए कार्यक्षमता है, बिना किसी रेगेक्स –

+0

आह के उपयोग के बिना ... यह कैसे प्राप्त कर सकता है ... केवल 5 मिनट के शोध के बारे में करें कि आप इस संभावना पर शासन करने में सक्षम होंगे। – HuStmpHrrr

उत्तर

9

कुल पागलपन (वर्षों 0-9999)

0 के बीच एक (this उत्तर के आधार पर) काम करता है साल के लिए और 9999.

(?<!\d)(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[1,3-9]|1[0-2])(?:29|30)))|(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))0229)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8]))(?!\d) 

निम्नलिखित (जाँच demo)


कुल पागलपन सरलीकृत (वर्ष 2000-2099)

तो आपको 2000 और 2099.

(?<!\d)(?:(?:20\d{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[1,3-9]|1[0-2])(?:29|30)))|(?:(?:20(?:0[48]|[2468][048]|[13579][26]))0229)|(?:20\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8]))(?!\d) 

के बीच लेकिन जैसा कि आप देख सकते हैं यह वास्तव में अधिक सरल नहीं है साल के लिए केवल काम करने के लिए यह आसान बनाने के कर सकते हैं।


समझदार रास्ता (demo जाँच) (वर्ष *)

अपने विवेक आप एक बहुत ही सरल regex से चिपके और फिर कोड का उपयोग कर यह सत्यापित करना चाहिए रखने के लिए।

(20\d{2})(\d{2})(\d{2}) 

0

मेरे रास्ते (नहीं समझदार रास्ता)

(((\d{4})(0[13578]|10|12)(0[1-9]|[12][0-9]|3[01]))|((\d{4})(0[469]|11)(0[1-9]|[12][0-9]|30))|((\d{4})(02)(0[1-9]|1[0-9]|2[0-8]))|([0-9][0-9][02468]40229)|([0-9][0-9][02468]80229)|([0-9][0-9][13579]20229)|([0-9][0-9][13579]60229)|([0-9][0-9][02468]00229)) 

vb.net के साथ (अधिक समझने में आसान, मुझे ऐसा लगता है)

( demo की जाँच करें)
Dim meses31 As String = "((\d{4})(0[13578]|10|12)(0[1-9]|[12][0-9]|3[01]))" 
    Dim meses30 As String = "((\d{4})(0[469]|11)(0[1-9]|[12][0-9]|30))" 
    Dim febrero28 As String = "((\d{4})(02)(0[1-9]|1[0-9]|2[0-8]))" 
    Dim febrero29 As String = "([0-9][0-9][02468]40229)|([0-9][0-9][02468]80229)|([0-9][0-9][13579]20229)|([0-9][0-9][13579]60229)|([0-9][0-9][02468]00229)" 

    Dim patternFecha As String = String.Concat("(", meses31, "|", meses30, "|", febrero28, "|", febrero29, ")") 
संबंधित मुद्दे