दिनांक प्रारूप dd / mm / yyyy को मान्य करने के लिए Rexx


171

मुझे dd/mm/yyyyएक नियमित अभिव्यक्ति के साथ प्रारूप के लिए एक तारीख स्ट्रिंग को मान्य करने की आवश्यकता है ।

यह regex मान्य करता है dd/mm/yyyy, लेकिन अमान्य दिनांक जैसे 31/02/4500:

^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$

dd/mm/yyyyलीप वर्ष समर्थन के साथ प्रारूप को मान्य करने के लिए एक वैध रेगेक्स क्या है ?


3
मुझे लगता है कि यदि आप एक सटीक अपेक्षा निर्धारित करते हैं तो यह मदद कर सकता है, क्योंकि यह रेक्सक्स नहीं करता है, वास्तव में, लीप वर्ष को सही ढंग से मान्य करता है; उदाहरण के लिए, 2013 में 29 फरवरी नहीं है, लेकिन यह regex यह दावा करता है कि ऐसा मान्य है: regexr.com?346fp
TML

7
रेगेक्स के साथ क्यों? आसान (और अधिक सटीक) तरीके हैं ...
दान पुजई

2
नियमित भाव मिलान पैटर्न के लिए होते हैं, संख्यात्मक मानों की जाँच नहीं करते। रेगेक्स के साथ एक संभावित स्ट्रिंग ढूंढें, फिर अपनी मेजबान भाषा (PHP, जो भी हो) में इसके संख्यात्मक मान की जांच करें।
एंडी लेस्टर

3
यह जवाब "कॉमन वैलिडेशन टास्क" के तहत स्टैक ओवरफ्लो रेगुलर एक्सप्रेशन एफएक्यू में जोड़ा गया है ।
aliteralmind

4
@BurhanKhalid: आप गलत हैं। सत्यापन के लिए नियमित अभिव्यक्ति सबसे अच्छा उपकरण है, क्योंकि HTML5 इनपुट में एक विशेषता है जिसका नाम patternएक नियमित अभिव्यक्ति है, और ब्राउज़र किसी भी जावास्क्रिप्ट का उपयोग किए बिना regex के खिलाफ स्वचालित रूप से मान्य करता है। बस पैटर्न विशेषता में एक regex निपटाने से!
खौफ

जवाबों:


328

आपके द्वारा चिपकाए गए रेगेक्स लीप वर्षों को सही ढंग से मान्य नहीं करता है, लेकिन एक है जो एक ही पोस्ट में करता है । मैंने इसे लेने के लिए संशोधित किया dd/mm/yyyy, dd-mm-yyyyया dd.mm.yyyy

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

मैंने अरुण को उसके उत्तर में और यहाँ भी दिए गए लिंक में इसका थोड़ा परीक्षण किया और यह काम करने लगता है।

14 फरवरी 2019 को संपादित करें: मैंने एक अल्पविराम को हटा दिया है जो regex में था जिसने तारीखों की अनुमति दी 29-0,-11


9
महाकाव्य रेगेक्स! प्रारूप के अनुसार इसे कितनी आसानी से इंटरचेंज किया जा सकता है? उदाहरण के लिए yyyy-mm-dd और mm-dd-yyyy। मैं इसे ध्यान में रखते हुए समझ गया था, लेकिन यह मेरे रेगेक्स कौशल से परे है।
mrswadge

7
इसके अलावा DD/MM/YYYY, यह रेगेक्स भी स्वीकार करता है DD/MM/YYजो मुझे यकीन नहीं है कि यह पोस्टर के शुरुआती इरादे में था। यदि आप 'YY' का समर्थन नहीं करना चाहते हैं, तो सभी वैकल्पिक ?क्वांटिफायर हटा दें ।
user1485864

2
@PurvDDesai प्रत्येक 0?को प्रतिस्थापित करता है 0, और अंतिम घटना को भी हटाता है ?
अमीर लूज़ॉन

4
@MaraisRossouw, आप सही हैं, 4 अंक वर्ष के लिए, वास्तव में 3 हैं ?जिन्हें हटा दिया जाना चाहिए: सभी के (?:1[6-9]|[2-9]\d)?साथ बदलें (?:1[6-9]|[2-9]\d)
अमीर लूज़ान

2
केवल यह कहने के लिए छोड़ देना : वाह और निश्चित रूप से धन्यवाद
जीरो डुंगॉग

266

मैंने अपनी आवश्यकता के अनुसार प्रारूप dd-mmm-YYYY, dd / mmm / YYYY, dd.mmm.YYYY के लिए @Ofir Luzon द्वारा दिए गए रेगेक्स को बढ़ा दिया है। समान आवश्यकता वाला कोई भी व्यक्ति इसका उल्लेख कर सकता है

^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

और यहां कुछ परीक्षण मामलों के लिए परीक्षण किया गया है http://regexr.com/39tr1

इस नियमित अभिव्यक्ति के लिए बेहतर समझ के लिए इस चित्र को देखें: यहां छवि विवरण दर्ज करें


1
हां आपने इसे कैसे उत्पन्न किया? :)
रेज़र

मैंने कुछ वेबसाइट का उपयोग करके इसे ऑनलाइन जेनरेट किया है और अब मुझे वह वेबसाइट भी याद नहीं है, जहाँ से मैंने यह चित्र बनाया है। मैं एक बार संदर्भ जोड़ूंगा जो मुझे याद है :)
आलोक चौधरी 3

4
@ user3733831 8888एक संभावित वर्ष है। मैं उस उम्र के बारे में जीने की उम्मीद करता हूं।
डैन निसेनबूम

1
छलांग वर्षों के लिए भी महान काम करता है। मैंने लघु स्पेनिश महीने के नामों के लिए भी समर्थन जोड़ा।
फेर आर

2
@ आलोकचौधरी, आरेख debuggex.com
ताहा बेसरी

69

नोटिस:

आपका regexp वर्षों से काम नहीं करता है कि "4 और 100 के गुणक हैं, लेकिन 400 के नहीं"। उस परीक्षण को पारित करने वाले वर्ष लीप वर्ष नहीं होते हैं। उदाहरण के लिए: 1900, 2100, 2200, 2300, 2500, आदि। दूसरे शब्दों में, यह लीप वर्ष के सभी वर्गों में प्रारूप \ d \ d00 के साथ सभी वर्ष डालता है, जो गलत है। - बहुत अधिक

तो यह केवल [1901 - 2099] (व्हीव) it के लिए ठीक से काम करता है

dd / एम एम / yyyy:

जाँच करता है कि क्या लीप वर्ष है। 1900 से 9999 तक के वर्ष मान्य हैं। केवल dd / MM / yyyy

(^(((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)

7
यह उत्तर केवल dd / MM / yyyy के साथ काम करता है । इसलिए, सही उत्तर है।
रोड्रिगो

2
@ सिल्वैनबी मैंने इसे तय कर दिया है
जीडीजियस

2
@gdZeus पहुंचाने के लिए धन्यवाद, दो साल बाद भी! यह सोचने के लिए डरावना है कि एक अधूरा समाधान इतने लंबे समय के लिए यहां चारों ओर मान्य हो गया है।
सिल्वैनबी

इसे जल्दी बनाने के लिए आप समूहों को गैर-समूह बना सकते हैं। regexr.com/3esom ^ (? :( ?:( ?:( ?: 0 [1-9] | 1 - 0-9]। 2 [0-8]) [\ /] (?: 0 [1-] 9] | 1 [012])) | (:( ?: 29 |? 30 | 31) [\ /] (?: 0 [13578] | 1 [02])) | (:( ?: 29 |? 30 ) [\ /] (?: 0 [4,6,9] | 11))) [\ /] (?: 19 | [2-9] [0-9]) \ घ \ घ) | (?: 29 [\ /] 02 [\ /] (?: 19 | [2-9] [0-9]) (?: 00 | 04 | 08 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 (96)) $
मैट वुकोमनोविच

मुझे लगता है कि मुझे एक त्रुटि मिली: 29/02/2100मौजूद नहीं है (2100 एक लीप वर्ष नहीं है), लेकिन अभी भी दिए गए पैटर्न द्वारा स्वीकार किया जाता है।
नॉरटेक्सियस जूल

17

इसे इस्तेमाल करे।

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

आप आसानी से http://www . अनियमित-expressions.info/javascriptexample.html पर नियमित अभिव्यक्ति का परीक्षण कर सकते हैं।


2
यह रेगेक्स महीने के साथ तारीख को मान्य नहीं करता है जैसे 30-02-2001... वैसे भी उत्तर के लिए धन्यवाद :)
नालका ५२६

12

मुझे संदेह है कि निम्नलिखित उतना ही सटीक है जितना कि उपयोगकर्ता के जूलियन से ग्रेगोरियन कैलेंडर पर स्विच किए जाने पर यह जानने के बिना उम्मीद की जा सकती है।

यह या तो '-', '/' को स्वीकार करता है, या वर्ष, महीने और दिन के बीच विभाजक के रूप में कुछ भी नहीं, कोई बात नहीं क्रम।

MMddyyyy:

^(((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))[-/]?[0-9]{4}|02[-/]?29[-/]?([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00))$

ddMMyyyy:

^(((0[1-9]|[12][0-9]|30)[-/]?(0[13-9]|1[012])|31[-/]?(0[13578]|1[02])|(0[1-9]|1[0-9]|2[0-8])[-/]?02)[-/]?[0-9]{4}|29[-/]?02[-/]?([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00))$

YYYYMMDD:

^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048]|0[0-9]|1[0-6])00)[-/]?02[-/]?29)$

आदेश के अलावा, ये सभी जूलियन कैलेंडर के लिए सटीक हैं (हर चार साल में लीप वर्ष) 1700 तक, जब ग्रेगोरियन कैलेंडर जूलियन से अलग हो जाता है। इसके दो मुद्दे हैं:

  1. यह वर्ष 0000 को स्वीकार करता है, जो कई में मौजूद नहीं है, लेकिन सभी मानक नहीं हैं। ध्यान दें कि आईएसओ 8601 वर्ष 0000 (1 ईसा पूर्व के बराबर) को स्वीकार करता है।
  2. यह 10-13 दिनों का समय नहीं है जो ग्रेगोरियन कैलेंडर के उपयोग में आने पर खो गए थे। हालांकि यह स्थानीयता से भिन्न होता है। उदाहरण के लिए, रोमन कैथोलिक चर्च ने 14 अक्टूबर, 1582 से 10 दिन, 5 अक्टूबर को छोड़ दिया, लेकिन ग्रीस (स्विच करने के लिए अंतिम) ने 1923 के 28 वें, 13 दिनों में 16 फरवरी को छोड़ दिया, 1700 के छलांग के वर्षों को ध्यान में रखते हुए। 1800, और 1900।

यह जावा के कैलेंडर कार्यान्वयन के खिलाफ वर्ष 0001 से वर्ष 9999 तक परीक्षण किया गया था, जिसमें केवल 1582 में 10 दिनों की उपरोक्त विसंगति थी।


YYYYMMDD regex गलत तरीके से मेल खाता है [01 | 02 | 03 | 05 | 06 | 07 | 07 | 09 | 10 | 11 | 13 | 14 | 15] 00-02-29 | सही रेगेक्स ^([0-9]{4}[-/]?((0[13-9]|1[012])[-/]?(0[1-9]|[12][0-9]|30)|(0[13578]|1[02])[-/]?31|02[-/]?(0[1-9]|1[0-9]|2[0-8]))|([0-9]{2}(([2468][048]|[02468][48])|[13579][26])|([13579][26]|[02468][048])00)[-/]?02[-/]?29)$:। अजगर के साथ परीक्षण किया गया: repl.it/repls/D dependentBestChapters
kpr

10

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

'Yyyy-MM-dd hh: mm' प्रारूप में एक तिथि से मेल खाने के लिए (या वास्तव में आप जो भी आदेश दें)

var dateerrors = false;
var yearReg = '(201[4-9]|202[0-9])';            ///< Allows a number between 2014 and 2029
var monthReg = '(0[1-9]|1[0-2])';               ///< Allows a number between 00 and 12
var dayReg = '(0[1-9]|1[0-9]|2[0-9]|3[0-1])';   ///< Allows a number between 00 and 31
var hourReg = '([0-1][0-9]|2[0-3])';            ///< Allows a number between 00 and 24
var minReg = '([0-5][0-9])';                    ///< Allows a number between 00 and 59
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
$('input').filter(function () {return this.id.match(/myhtml_element_with_id_\d+_datetime/);}).each(function (e) {
    if (e > 0) {
        // Don't test the first input. This will use the default
        var val = $(this).val();
        if (val && !val.trim().match(reg)) {
            dateerrors = true;
            return false;
        }
    }
});
if (dateerrors) {
    alert('You must enter a validate date in the format "yyyy-mm-dd HH:MM", e.g. 2019-12-31 19:30');
    return false;
}

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

थोड़ा स्पष्टीकरण:

var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');

^मतलब मैच की शुरुआत, जबकि मैच $का अंत।

return this.id.match(/myhtml_element_with_id_\d+_datetime/);

\d+साधन एक या पूर्णांकों का एक सन्निहित क्रम का मिलान, इसलिए myhtml_element_with_id_56_datetimeऔर myhtml_element_with_id_2_datetimeमिलान कर देंगे, लेकिन myhtml_element_with_id_5a_datetimeनहीं होगा


8

निम्नलिखित दिनांक प्रारूपों में से किसी से मिलान करने के लिए रेगेक्स का एक और संस्करण यहां दिया गया है और अग्रणी शून्य को छोड़ा जा सकता है:

regex: ^[0-3]?[0-9].[0-3]?[0-9].(?:[0-9]{2})?[0-9]{2}$

मेल खाता है:

1/1/11 or 1.1.11 or 1-1-11 : true 01/01/11 or 01.01.11 or 01-01-11 : true 01/01/2011 or 01.01.2011 or 01-01-2011 : true 01/1/2011 or 01.1.2011 or 01-1-2011 : true 1/11/2011 or 1.11.2011 or 1-11-2011 : true 1/11/11 or 1.11.11 or 1-11-11 : true 11/1/11 or 11.1.11 or 11-1-11 : true

नियमित अभिव्यक्ति दृश्य

डीबगेजक्स डेमो


4
काम नहीं करता है अगर आपके पास 13/13/2000= मेल खाता है सच
आंद्रेई Krasutski

3
39/39/39 एक तारीख नहीं है। कृपया इस उत्तर के लिए मतदान बंद करें।
वॉरेन सीरज

6

यहाँ मैंने एक के लिए लिखा है dd/mm/yyyyजहाँ विभाजक एक -.,/वर्ष की सीमा तक हो सकता है 0000-9999

यह लीप वर्ष से संबंधित है और रेगेक्स फ्लेवर के लिए डिज़ाइन किया गया है, जो लुकहेड्स का समर्थन करता है , समूह और बैकरेफर पर कब्जा करता है। इस तरह के लिए मान्य नहीं है d/m/yyyy। जरूरत है तो और विभाजकों को जोड़ने की[-.,/]

^(?=\d{2}([-.,\/])\d{2}\1\d{4}$)(?:0[1-9]|1\d|[2][0-8]|29(?!.02.(?!(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)\d{2}(?:[02468][048]|[13579][26])))|30(?!.02)|31(?=.(?:0[13578]|10|12))).(?:0[1-9]|1[012]).\d{4}$

Regex101 पर परीक्षण ; जावा स्ट्रिंग के रूप में:

"^(?=\\d{2}([-.,\\/])\\d{2}\\1\\d{4}$)(?:0[1-9]|1\\d|[2][0-8]|29(?!.02.(?!(?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)\\d{2}(?:[02468][048]|[13579][26])))|30(?!.02)|31(?=.(?:0[13578]|10|12))).(?:0[1-9]|1[012]).\\d{4}$"

व्याख्या की:

(?x) # modifier x: free spacing mode (for comments)
     # verify date dd/mm/yyyy; possible separators: -.,/
     # valid year range: 0000-9999

^    # start anchor

# precheck xx-xx-xxxx,... add new separators here
(?=\d{2}([-.,\/])\d{2}\1\d{4}$)

(?:  # day-check: non caturing group

  # days 01-28
  0[1-9]|1\d|[2][0-8]| 

  # february 29d check for leap year: all 4y / 00 years: only each 400
  # 0400,0800,1200,1600,2000,...
  29
  (?!.02. # not if feb: if not ...
    (?!
      # 00 years: exclude !0 %400 years
      (?!(?:[02468][1-35-79]|[13579][0-13-57-9])00)

      # 00,04,08,12,... 
      \d{2}(?:[02468][048]|[13579][26])
    )
  )|

  # d30 negative lookahead: february cannot have 30 days
  30(?!.02)|

  # d31 positive lookahead: month up to 31 days
  31(?=.(?:0[13578]|10|12))

) # eof day-check

# month 01-12
.(?:0[1-9]|1[012])

# year 0000-9999
.\d{4}

$ # end anchor

इसके अलावा SO रेगेक्स FAQ देखें ; कृपया मुझे बताएं, अगर यह विफल रहता है।


5

यह पूर्व यहाँ पाया

^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

यह प्रारूप mm/dd/yyyyऔर मान्य तिथियों को सही ढंग से सत्यापित करता है (लेकिन नहीं m/d/yyyy)।

कुछ परीक्षण


1
केवल 2014 से पहले काम करता है, को बदलना होगा। 2019
टोनी डोंग

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

के बीच किसी भी तारीख को मान्य करेगा 1900-2099


5

निम्नलिखित अभिव्यक्ति अच्छी है और हेरफेर करना आसान है:

((((0[13578]|1[02])(\/|-|.)(0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)(\/|-|.)(0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)((\/|-|.)(0[1-9]|1[0-9]|2[0-8]))))(\/|-|.)(19([6-9][0-9])|20(0[0-9]|1[0-4])))|((02)(\/|-|.)(29)(\/|-|.)(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26])))

यह MM / dd / YYYY प्रारूप के अनुसार मान्य होता है और 1960 से 2016 तक लीप ईयर सपोर्ट के लिए अनुमति देता है। यदि आपको लीप ईयर सपोर्ट की जरूरत है तो आपको एक्सप्रेशन के इस हिस्से में हेरफेर करने की जरूरत है:

(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]))

आशा है कि इससे आपको बहुत मदद मिली


3

एक और उत्तर जो महीने (मिमी) और वर्ष (yyyy) के आधार पर दिन (dd) को मान्य करता है (यानी, लीप वर्षों में 29 फरवरी को भी मान्य करता है) और ग्रेगोरियन के अनुसार 0001 से 9999 (0000) तक अमान्य वर्षों की अनुमति देता है पंचांग)

^(?:(?:(?:0[1-9]|[12]\d|3[01])/(?:0[13578]|1[02])|(?:0[1-9]|[12]\d|30)/(?:0[469]|11)|(?:0[1-9]|1\d|2[0-8])/02)/(?!0000)\d{4}|(?:(?:0[1-9]|[12]\d)/02/(?:(?!0000)(?:[02468][048]|[13579][26])00|(?!..00)\d{2}(?:[02468][048]|[13579][26]))))$

1
18/05/0017

1

मैं एक एपीआई के साथ काम कर रहा हूं जो केवल MM / DD / YYYY प्रारूप को स्वीकार करता है। मुझे कोई और पोस्ट नहीं मिला, जिसने लीप इयर्स के साथ-साथ टिरर के उत्तर को काफी कम किया हो , इसलिए मैंने इसे ट्विक किया और इसे फिर से यहां पोस्ट कर रहा हूं जो किसी को भी इसकी आवश्यकता हो सकती है।

/^(?:(?:(?:0[13578]|1[02])(\/)31)\1|(?:(?:0[1,3-9]|1[0-2])(\/)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:02(\/)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})$/

0
((((0[13578]|1[02])\/(0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)\/(0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)(\/(0[1-9]|1[0-9]|2[0-8]))))\/(19([6-9][0-9])|20([0-9][0-9])))|((02)\/(29)\/(19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

मान्य करेगा MM/DD/YYYYसाथ प्रारूप 1960करने के लिए2028

यदि आपको लीप ईयर सपोर्ट का विस्तार करने की आवश्यकता है तो जोड़ें

19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048]|3[26]|4[048])))

यह भी काम है

^((((0[13578]|1[02])[/](0[1-9]|1[0-9]|2[0-9]|3[01]))|((0[469]|11)[/](0[1-9]|1[0-9]|2[0-9]|3[0]))|((02)([/](0[1-9]|1[0-9]|2[0-8]))))[/](19([6-9][0-9])|20([0-9][0-9])))|((02)[/](29)[/](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

यदि आप ऑनलाइन http://regexr.com/ की जांच करने के लिए mm-dd-yyyyप्रतिस्थापित [/]करने की तुलना में प्रारूप बदल सकते हैं[-]


0

एमएम / डीडी / वाईवाईवाई के लिए आप उपयोग कर सकते हैं

^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$

यह उचित दिनों और पतंगों का सत्यापन करता है।

याद रखें कि आप अपनी नियमित अभिव्यक्ति की जांच कर सकते हैं

regex101

जो मैं सुझा :)

मज़े करो!


0
^(((([13578]|0[13578]|1[02])[-](0[1-9]|[1-9]|1[0-9]|2[0-9]|3[01]))|(([469]|0[469]|11)[-]([1-9]|1[0-9]|2[0-9]|3[0]))|((2|02)([-](0[1-9]|1[0-9]|2[0-8]))))[-](19([6-9][0-9])|20([0-9][0-9])))|((02)[-](29)[-](19(6[048]|7[26]|8[048]|9[26])|20(0[048]|1[26]|2[048])))

यह regex प्रारूप में तिथियों को मान्य करेगा:

12-30-2016 (mm-dd-yyyy) या 12-3-2016 (mm-d-yyyy) या 1-3-2016 (md-yyyy) या 1-30-2016 (m-dd-yyyy)


0

मुझे पता है कि यह सवाल का एक ठोस जवाब है, लेकिन अगर सवाल का इरादा है कि 'मैं एक तारीख को कैसे मान्य करूं?', तो क्यों न कोशिश करें कि प्रोग्रामिंग भाषा को पूरी मेहनत करने दें (यदि आप किसी भाषा का उपयोग कर रहे हैं तो) कर सकते हैं)?

जैसे php में

$this_date_object = date_create($this_date);

if ($this_date_object == false )
    {

        // process the error

    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.