তারিখের ফর্ম্যাটটি ডিডি / মিমি / ইয়াহী যাচাই করার জন্য রেজেক্স


171

dd/mm/yyyyনিয়মিত এক্সপ্রেশন সহ ফর্ম্যাটটির জন্য আমার একটি তারিখের স্ট্রিংটি বৈধ করতে হবে ।

এই রেজেক্সটি বৈধতা দেয় 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
আমি মনে করি আপনি যদি একটি সঠিক প্রত্যাশা সেট করেন তবে এটি সাহায্য করতে পারে, কারণ এই রেজেক্স বাস্তবে সঠিকভাবে লিপ বছরগুলিকে বৈধতা দেয় না; উদাহরণস্বরূপ, ২০১৩ সালে ২৯ শে ফেব্রুয়ারি নেই, তবে এই রেজেক্সটি দৃser়ভাবে
টিএমএল

7
রেগেক্সের সাথে কেন? আরও সহজ (এবং আরও নিখুঁত) উপায় রয়েছে ...
ড্যান পুজে

2
নিয়মিত প্রকাশগুলি মিলের নিদর্শনগুলির জন্য, সংখ্যার মানগুলি পরীক্ষা করে না। রেজেক্সের সাথে একটি সম্ভাব্য স্ট্রিং সন্ধান করুন, তারপরে আপনার হোস্ট ভাষা যেভাবেই হোক (পিএইচপি, যাই হোক না কেন) তার সংখ্যার মানটি পরীক্ষা করুন।
অ্যান্ডি লেস্টার

3
এই উত্তরটি "সাধারণ বৈধকরণ কার্যাদি" এর আওতায় স্ট্যাক ওভারফ্লো নিয়মিত এক্সপ্রেশন FAQ এ যুক্ত করা হয়েছে ।
aliteralmind

4
@ বুরহান খালিদ: আপনি ভুল বলেছেন। নিয়মিত প্রকাশটি বৈধতার জন্য সেরা সরঞ্জাম, যেহেতু এইচটিএমএল 5 ইনপুটটির একটি নামযুক্ত বৈশিষ্ট্য রয়েছে patternযা নিয়মিত প্রকাশ করে এবং ব্রাউজারগুলি কোনও জাভাস্ক্রিপ্ট ব্যবহার না করেই রেজেক্সের বিরুদ্ধে স্বয়ংক্রিয়ভাবে বৈধ হয়ে যায়। কেবল প্যাটার্ন বৈশিষ্ট্যের মধ্যে একটি রেজেক্স নিষ্পত্তি করে!
বিস্মিত

উত্তর:


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 এডিট করুন: আমি রেগেক্সে থাকা কমাটি সরিয়েছি যা তারিখগুলি পছন্দ করে 29-0,-11


9
এপিক রেজেক্স! ফর্ম্যাট অনুযায়ী এটি কীভাবে সহজেই পরিবর্তিত হতে পারে? উদাহরণস্বরূপ yyyy-mm-dd এবং মিমি-ডিডি-ইয়িআই। আমি এটি মাথায় রেখে এটি বুঝতে পেরেছি, তবে এটি আমার রেগেক্স দক্ষতার বাইরে।
এমসওয়াডেজ

7
অন্য DD/MM/YYYY, এই Regex এছাড়াও গ্রহণ DD/MM/YYযা আমি নিশ্চিত যে এটা পোস্টার প্রাথমিক উদ্দেশ্য ছিল নই। আপনি যদি 'ওয়াইওয়াই' সমর্থন না করতে চান তবে সমস্ত ?alচ্ছিক কোয়ান্টিফায়ার অপসারণ করুন ।
ব্যবহারকারী 1485864

2
@ পূর্বদেশেডেসাই প্রত্যেকের 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 ফর্ম্যাটের জন্য প্রসারিত করেছি। একই প্রয়োজনীয়তার সাথে অন্য যে কেউ এটি উল্লেখ করতে পারেন

^(?:(?: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
হ্যাঁ আপনি এটি কীভাবে তৈরি করেছেন? :)
রেজার

আমি এটি কোনও ওয়েবসাইট ব্যবহার করে অনলাইনে তৈরি করেছি এবং এখন আমি যে ওয়েবসাইটটি থেকে এই চিত্রটি উত্পন্ন করেছি তাও মনে নেই। আমার মনে
অলোক চৌধুরী চৌধুরী

4
@ ব্যবহারকারী3733831 8888একটি সম্ভাব্য বছর। আমি সেই বয়স সম্পর্কে বেঁচে থাকার প্রত্যাশা করি।
ড্যান নিসেনবাউম

1
এমনকি লিপ বছর ধরে দুর্দান্ত কাজ করে। আমি সংক্ষিপ্ত স্প্যানিশ মাসের নামের জন্য সমর্থনও যোগ করেছি।
ফের আর

2
অলোকচৌধুরী, চিত্রটি ডিবাগেক্সটকম
তাহা বেস্রি

69

বিজ্ঞপ্তি:

আপনার regexp কয়েক বছর ধরে কাজ করে না যা "4 এবং 100 এর গুণক, তবে 400 এর নয়"। যে পরীক্ষাগুলি উত্তীর্ণ হয় সেগুলি লীপ বছর হয় না। উদাহরণস্বরূপ: 1900, 2100, 2200, 2300, 2500, ইত্যাদি। অন্য কথায়, এটি লিপ বছরের একই শ্রেণিতে \ d \ d00 ফর্ম্যাট দিয়ে সমস্ত বছর রাখে, যা ভুল। - মুচটোলেয়ার্ন

সুতরাং এটি ঠিক [1901 - 2099] (Whew) for এর জন্য সঠিকভাবে কাজ করে 😊

DD / MM / YYYY:

লিপ ইয়ার কিনা তা পরীক্ষা করে দেখুন। 1900 থেকে 9999 বছরগুলি বৈধ। কেবলমাত্র ডিডি / এমএম / ইয়ে

(^(((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
এই উত্তরটি কেবলমাত্র ডিডি / এমএম / ইয়াহির সাথে কাজ করে । সুতরাং, সঠিক উত্তর।
রডরিগো

2
@ সিলভাইনবি আমি এটি ঠিক করে
রেখেছি

2
@ জিডিজেউস বিতরণ করার জন্য ধন্যবাদ, এমনকি দু'বছর পরে! ভেবে ভীতিজনক যে এখানে একটি অসম্পূর্ণ সমাধান এতদূর ধরে বৈধ হয়ে দাঁড়িয়েছে।
সিলেভাইনবি

এটিকে দ্রুত করার জন্য আপনি দলগুলিকে অ-গোষ্ঠীভুক্ত করতে পারেন। 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 একটি লিপ বছর নয়), তবে এখনও প্রদত্ত প্যাটার্ন দ্বারা গৃহীত।
KnorxThieus


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)$

অর্ডার ব্যতীত, গ্রেগরিয়ান ক্যালেন্ডার জুলিয়ান থেকে সরে যাওয়ার পরে, এগুলি জুলিয়ান ক্যালেন্ডারে (প্রতি চার বছরে লিপ বছর) যথাযথ হয়। এটিতে দুটি সমস্যা রয়েছে:

  1. এটি ২০০০০ সালকে গ্রহণ করে, যা অনেকের মধ্যেই নেই, তবে সমস্ত মানের নয়। নোট করুন যে আইএসও 8601 বছর 0000 গ্রহণ করে (1 বিসিই সমতুল্য)।
  2. গ্রেগরিয়ান ক্যালেন্ডার ব্যবহারের সময় এটি হারিয়ে যাওয়া 10-13 দিনগুলি এড়িয়ে যায় না। যদিও স্থানীয়ভাবে এটি পরিবর্তিত হয়। উদাহরণস্বরূপ, রোমান ক্যাথলিক চার্চটি 10 ​​ই অক্টোবর, 14 ই অক্টোবর, 1582 সালের 15 ই অক্টোবর বাদ পড়েছিল, তবে গ্রিস (স্যুইচিংয়ে সর্বশেষ) 16 শে ফেব্রুয়ারী 1923 সালের 28 তম মাধ্যমে 13 দিনের মধ্যে বাদ পড়েছিল, 1700 এর লিপ বছরগুলি বিবেচনায় নিয়েছিল, 1800, এবং 1900।

এটি 10001 সাল থেকে 9999 সাল পর্যন্ত জাভা ক্যালেন্ডার প্রয়োগের বিরুদ্ধে পরীক্ষা করা হয়েছে কেবলমাত্র 1515 সালে 10 দিনের উপরে বর্ণিত একমাত্র তাত্পর্য রয়েছে।


ওয়াইওয়াইওয়াইএমএমডিডি রেজেজেক্স ভুলভাবে মেলে [01 | 02 | 03 | 05 | 06 | 07 | 09 | 10 | 11 | 13 | 14 | 15] 00-02-29। সংশোধন Regex: ^([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/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= ম্যাচগুলি সত্য
আন্ড্রেই ক্রাসসটস্কি

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

এছাড়াও এসও রেজেক্স এফএকিউ দেখুন ; যদি এটি ব্যর্থ হয় তবে দয়া করে আমাকে জানান।


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 এর আগেই কাজ করে, অবধি সমর্থন করতে | 20 (0 [0-9] | 1 [0-4]])) থেকে | 20 (0 [0-9] | 1 [0-9])) পর্যন্ত সমর্থন করতে হবে 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])))

এটি এমএম / ডিডি / ওয়াইওয়াইওয়াই ফর্ম্যাট অনুসারে বৈধ হয় এবং 1960 থেকে 2016 সাল পর্যন্ত লিপ ইয়ারের জন্য সহায়তা দেয় you

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

আশা করি এটি আপনাকে অনেক সাহায্য করেছে


3

আরেকটি উত্তর যা মাস (মিমি) এবং বছরের উপর নির্ভর করে দিন (ডিডি) (বৈধ) হিসাবে বৈধতা দেয় (অর্থাত, লিপ বছরগুলিতে ২৯ শে ফেব্রুয়ারিকেও বৈধতা দেয়) এবং গ্রেগরিয়ান অনুসারে একটি অকার্যকর বছরে 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

আমি এমন একটি এপিআই নিয়ে কাজ করছি যা কেবলমাত্র এমএম / ডিডি / ওয়াইওয়াই ফর্ম্যাট গ্রহণ করে। আমি ওপীরের উত্তর হিসাবে বেশ কয়েক বছর আগে লাফিয়ে যাওয়া এমন কোনও পোস্ট খুঁজে পাইনি , তাই আমি এটি টুইট করেছি এবং যে কারওর পক্ষে এটি প্রয়োজন হতে পারে এখানে এটি পুনরায় পোস্ট করছি।

/^(?:(?:(?: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])))

আপনি বিন্যাস পরিবর্তন করতে পারেন mm-dd-yyyyচেয়ে প্রতিস্থাপন [/]করার [-] এছাড়াও পরীক্ষা অনলাইন http://regexr.com/


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])))

এই রেজেক্স ফর্ম্যাটে তারিখগুলি বৈধ করবে:

12-30-2016 (মিমি-ডিডি-ইয়াই) বা 12-3-2016 (মিমি-ডি-ইইইআই) বা 1-3-2016 (এমডি-ইয়েই) বা 1-30-2016 (এম-ডিডি-ইয়াই)


0

আমি জানি এটি প্রশ্নের একটি স্পর্শকাতর উত্তর, তবে যদি প্রশ্নটির উদ্দেশ্যটি হয় 'আমি কীভাবে একটি তারিখকে বৈধতা দেব?', তবে প্রোগ্রামিংয়ের ভাষাটিকে সমস্ত কঠোর পরিশ্রম করতে দেওয়ার চেষ্টা কেন করবেন না (যদি আপনি কোনও ভাষা ব্যবহার করছেন যে করতে পারা)?

যেমন পিএইচপি

$this_date_object = date_create($this_date);

if ($this_date_object == false )
    {

        // process the error

    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.