আরএক্স দ্বারা ভালিডেট আইএসও 8601


16

চ্যালেঞ্জ

সংক্ষিপ্ততম রেজেক্সটি সন্ধান করুন

  1. প্রলেপটিক গ্রেগরিয়ান ক্যালেন্ডারে প্রতিটি সম্ভাব্য তারিখকে বৈধ করে, অর্থাত্ ম্যাচগুলি (যা 1582 সালে এটির প্রথম গ্রহণের আগে সমস্ত তারিখের ক্ষেত্রেও প্রযোজ্য) এবং
  2. কোনও অবৈধ তারিখের সাথে মেলে না।

আউটপুট

আউটপুট সুতরাং সত্য বা মিথ্যা।

ইনপুট

ইনপুটটি 3 টি প্রসারিত আইএসও 8601 তারিখের ফর্ম্যাটগুলির মধ্যে রয়েছে - কোনও সময় নয়।

প্রথম দুটি হ'ল ±YYYY-MM-DD(বছর, মাস, দিন) এবং ±YYYY-DDD(বছর, দিন)। লিপ দিবসের জন্য দু'জনেরই বিশেষ ক্যাসিং দরকার। এগুলি প্রসারিত আরএক্সগুলির সাথে এগুলি নির্লজ্জভাবে পৃথকভাবে মিলছে:

(?<year>[+-]?\d{4,})-(?<month>\d\d)-(?<day>\d\d)
(?<year>[+-]?\d{4,})-(?<doy>\d{3})

তৃতীয় ইনপুট ফর্ম্যাটটি ±YYYY-wWW-D(বছর, সপ্তাহ, দিন)। জটিল লিপ সপ্তাহের ধরণের কারণে এটি জটিল।

(?<year>-?\d{4,})-W(?<week>\d\d)-(?<dow>\d)

তিনটি সংযুক্তের জন্য একটি মৌলিক, তবে অপর্যাপ্ত বৈধতা যাচাই করা দেখতে এরকম কিছু হবে:

[+-]?\d{4,}-((0\d|1[0-2])-([0-2]\d|3[01]) ↩
            |([0-2]\d\d|3[0-5]\d|36[0-6]) ↩
            |(W([0-4]\d|5[0-3])-[1-7]))

পরিবেশ

একটি অধিবর্ষ প্রলেপ্টিক গ্রেগরিয়ান ক্যালেন্ডারে রয়েছে লিপ দিন …-02-29 এবং এইভাবে এটি 366 দিন দীর্ঘ, অত: পর …-366বিদ্যমান। এই যে কোনো বছর যার পূরণবাচক সংখ্যা 4 দিয়ে বিভাজ্য ঘটবে, কিন্তু না 100 দ্বারা যদি না এটি বিভাজ্য 400 দ্বারা এর বছর শূন্য বিদ্যমান এটি ক্যালেন্ডারে এবং এটি একটি অধিবর্ষ হয়।

একটি দীর্ঘ বছর আইএসও সপ্তাহে ক্যালেন্ডারে একটি 53rd সপ্তাহে, যা এক একটি "শব্দটি পারে ধারণ করে লিপ সপ্তাহে "। এটি সমস্ত বছরগুলিতে ঘটে যেখানে 1 জানুয়ারী একটি বৃহস্পতিবার এবং অতিরিক্তভাবে সমস্ত লিপ বছরে যেখানে এটি বুধবার হয়। এটি সাধারণত 5 থেকে 6 বছর পরে দেখা যায়, একটি আপাতদৃষ্টিতে অনিয়মিত প্যাটার্নে।

এক বছরে কমপক্ষে 4 টি অঙ্ক থাকে। 10 টিরও বেশি সংখ্যক সংখ্যক বছরগুলিকে সমর্থন করার দরকার নেই, কারণ এটি মহাবিশ্বের বয়সের কাছাকাছি (সিএ। 14 বিলিয়ন বছর)। শীর্ষস্থানীয় প্লাস চিহ্নটি alচ্ছিক, যদিও প্রকৃত স্ট্যান্ডার্ডটি প্রস্তাব দেয় যে এটি 4 টিরও বেশি সংখ্যক বছর ধরে প্রয়োজনীয় হওয়া উচিত।

আংশিক বা কাটা তারিখগুলি, যেমন দিন-নির্ভুলতার চেয়ে কম সহ, গ্রহণ করা উচিত নয়।

তারিখ স্বরলিপি, যেমন মাসের অংশ, না না একদল যে রেফারেন্সড যেতে পারে দ্বারা মেলানো করা থাকতে হবে।

বিধি

এটি কোড-গল্ফ। এক্সিকিউটেড কোড ছাড়াই সংক্ষিপ্ততম রেজেক্স। আপডেট: আপনি পুনরাবৃত্তি এবং ভারসাম্যপূর্ণ গ্রুপগুলির মতো বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন তবে 10 এর একটি ফ্যাক্টর দ্বারা জরিমানা করা হবে, যার পরে অক্ষর গণনাটি এর সাথে গুণিত হয়! এটি এখন হার্ড কোড গল্ফের নিয়ম থেকে আলাদা : 7 দ্বারা বিভাজনের জন্য রেজেক্স । আগের উত্তর একটি টাই জয়।

পরীক্ষার মামলা

বৈধ পরীক্ষা

2015-08-10
2015-10-08
12015-08-10
-2015-08-10
+2015-08-10
0015-08-10
1582-10-10
2015-02-28
2016-02-29
2000-02-29
0000-02-29
-2000-02-29
-2016-02-29
200000-02-29
2016-366
2000-366
0000-366
-2016-366
-2000-366
2015-081
2015-W33-1
2015-W53-7
 2015-08-10 

শেষটি allyচ্ছিকভাবে বৈধ, অর্থাত্ ইনপুট স্ট্রিংগুলিতে শীর্ষস্থানীয় এবং পিছনের স্থানগুলি ছাঁটাই করা যেতে পারে।

অবৈধ ফর্ম্যাটগুলি

-0000-08-10     # that's an arbitrary decision
15-08-10        # year is at least 4 digits long
2015-8-10       # month (and day) is exactly two digits long, i.e. leading zero is required
015-08-10       # year is at least 4 digits long
20150810        # though a valid ISO format, we require separators; could also be interpreted as a 8-digit year
2015 08 10      # separator must be hyphen-minus
2015.08.10      # separator must be hyphen-minus
2015–08–10      # separator must be hyphen-minus
2015-0810
201508-10       # could be October in the year 201508
2015 - 08 - 10  # no internal spaces allowed
2015-w33-1      # letter ‘W’ must be uppercase
2015W33-1       # it would be unambiguous to omit the separator in front of a letter, but not in the standard
2015W331        # though a valid ISO format we require separators
2015-W331
2015-W33        # a valid ISO date, but we require day-precision
2015W33

অবৈধ তারিখ

2015        # a valid ISO format, but we require day-precision
2015-08     # a valid ISO format, but we require day-precision
2015-00-10  # month range is 1–12
2015-13-10  # month range is 1–12
2015-08-00  # day range is 1–28 through 31
2015-08-32  # max. day range is 1–31
2015-04-31  # day range for April is 1–30
2015-02-30  # day range for February is 1–28 or 29
2015-02-29  # day range for common February is 1–28
2100-02-29  # most century years are non-leap
-2100-02-29 # most century years are non-leap
2015-000    # day range is 1–365 or 366
2015-366    # day range is 1–365 in common years
2016-367    # day range is 1–366 in leap years
2100-366    # most century years are non-leap
-2100-366   # most century years are non-leap
2015-W00-1  # week range is 1–52 or 53
2015-W54-1  # week range is 1–53 in long years
2016-W53-1  # week range is 1–52 in short years
2015-W33-0  # day range is 1–7
2015-W33-8  # day range is 1–7

2
এই প্রশ্নটি যথাযথভাবে সংজ্ঞায়িত হয়নি কারণ রেজেক্স ভাষা নির্দিষ্ট করা হয়নি।
orlp

1
@orlp যদি এটি নির্দিষ্ট না করা থাকে তবে পছন্দটি সীমাবদ্ধ নয়। আমি উদ্দেশ্য করে "রেইজেক্স" বা "আরএক্স" লিখেছি, যাতে কেউ উপভাষা ব্যবহার করতে পারে যা পুনরাবৃত্তির অনুমতি দেয় ইত্যাদি (যেমন সিএফজি, আরজি নয়)।
ক্রিসোভ

আমি আপনাকে দৃge়ভাবে রেজেক্স ভাষা সীমাবদ্ধ করার পরামর্শ দিচ্ছি, কারণ কোনও প্রতিযোগীর পক্ষে সমাধানের জন্য কয়েক ঘন্টার কাজ করা কেবলমাত্র মৌলিকভাবে আরও শক্তিশালী এমন একটি ভাষা দ্বারা তুচ্ছভাবে মারধর করা খুব ত্বক হবে। আপনি যদি নিয়মিত এক্সপ্রেশন (ডিএফএ এর মতো) এর আসল সিএস সংজ্ঞায় ভাষাটি সীমাবদ্ধ করে রাখেন তবে সমস্যাটি একটি আকর্ষণীয় অপ্টিমাইজেশনের উত্তরে পরিণত হয়।
orlp

নিয়মিত এক্সপ্রেশন ব্যবহার করে আইএসও -8601 তারিখের বৈধতা যাচাই করার জন্য আমাকে আসলে কাজের জন্য করতে হয়েছিল। তবে orlp এর সাথে একমত, আমি মনে করি এখানে একটি ভাষা প্রয়োজন।
অ্যালেক্স এ

1
রিজেক্স পার্ল 6-এ মেথড থেকে উত্তরাধিকার সূত্রে আসে তাই এটি নিজেই এক্সিকিউটেবল কোডের একটি রূপ।
ব্র্যাড গিলবার্ট

উত্তর:


4

পিসিআরই (এছাড়াও পার্ল), 778 বাইট

/^([+-]?\d*((([02468][048]|[13579][26]|\d\d(?!00))([02468][048]|[13579][26]))|\d{4}(?!-02-29|-366))-((?!02-3|(0[469]|11)-31|000)((0[1-9]|1[012])-(0[1-9]|[12]\d|30|31)|([012]\d\d|3([0-5]\d|6[0-6])))|(W(?!00)([0-4]\d|51|52)-[1-7]))|((\+?\d*([02468][048]|[13579][26])|-\d*([02468][159]|[13579][37]))(04|09|15|20|26|32|37|43|48|54|60|65|71|76|82|88|93|99)|(\+?\d*([02468][159]|[13579][37])|-\d*([02468][26]|[13579][048]))(05|11|16|22|28|33|39|44|50|56|61|67|72|78|84|89|95)|(\+?\d*([02468][26]|[13579][048])|-\d*([02468][37]|[13579][159]))(01|07|12|18|24|29|35|40|46|52|57|63|68|74|80|85|91|96)|\+?\d*(([02468][37]|[13579][159])(03|14|20|25|31|36|42|53|59|64|70|76|81|87|92|[049]8))|-\d*(([02468][048]|[13579][26])([059]2|08|13|19|24|30|36|41|47|58|64|69|75|80|86|97)))-W53-[1-7])$/

এটি কোনও ফ্ল্যাগের উপর নির্ভর করে না তা দেখানোর জন্য আমি বাইট গণনায় ডিলিমিটারদের অন্তর্ভুক্ত করেছি।

এটি অন্যান্য স্ট্রিংগুলির মধ্যে বৈধ তারিখগুলির সাথে মেলে না1234-56-89 2016-02-29 9876-54-32 । বছরের জন্য সর্বাধিক 10 ডিজিটের জন্য পরীক্ষা না করে রেজেক্সটি সংক্ষিপ্ত।

মন্তব্য সহ প্রসারিত:

/^  # Start of pattern (no leading space)
  (
    # YEAR
    # Optional sign and digits if more than 4 in year
    [+-]?\d*(
      # Years 00??, 04??, 08?? ... 92??, 96?? OR dd not followed by 00
      # followed by 00, 04, 08 ... 92, 96 OR
      (([02468][048]|[13579][26]|\d\d(?!00))([02468][048]|[13579][26])) |
      # any year not followed by 29 February or day 366
      \d{4}(?!-02-29|-366)
    # dash
    ) -
    # MONTH AND DAY, or DAY OF YEAR, or WEEK OF YEAR AND DAY if less than 53 weeks
    (
      # Not (30 or 31 February OR 31 April, June, September or December OR day 0)
      (?!02-3|(0[469]|11)-31|000)
      (
        # Month         dash         day         OR
        (0[1-9]|1[012]) - (0[1-9]|[12]\d|30|31) |
        # 001-299 OR 300-359 OR 360-366
        ([012]\d\d | 3([0-5]\d | 6[0-6]))
      # OR
      ) |
      (
        # W    01-52    dash    1-7
        W(?!00)([0-4]\d|51|52)-[1-7]
      )
    # OR
    ) |
    # WEEK OF YEAR AND DAY only if week is 53
    (
      # Optional plus and extra year digits
      \+?\d*(
        # Years +0303 - +9998
        ([02468][37]|[13579][159])(03|14|20|25|31|36|42|53|59|64|70|76|81|87|92|[049]8)
      ) |
      # Minus and extra year digits
      -\d*(
        # Years -0002 - -9697
        ([02468][048]|[13579][26])([059]2|08|13|19|24|30|36|41|47|58|64|69|75|80|86|97)
      ) |
      # Years +0004 - +9699, -0104 - -9799
      (\+?\d*([02468][048]|[13579][26])|-\d*([02468][159]|[13579][37]))
          (04|09|15|20|26|32|37|43|48|54|60|65|71|76|82|88|93|99) |
      # Years +0105 - +9795, -0205 - -9895
      (\+?\d*([02468][159]|[13579][37])|-\d*([02468][26]|[13579][048]))
          (05|11|16|22|28|33|39|44|50|56|61|67|72|78|84|89|95) |
      # Years +0201 - +9896, -0301 - -9996
      (\+?\d*([02468][26]|[13579][048])|-\d*([02468][37]|[13579][159]))
          (01|07|12|18|24|29|35|40|46|52|57|63|68|74|80|85|91|96)
    # dash W 53 dash 1-7
    )-W53-[1-7]
  # End of pattern (no trailing space)
  )$/x

আমি এখনও সবকিছু চেক করি নি, তবে মনে হয় আপনি (?!…)আমার সমাধানের তুলনায় এক্সপ্রেশন দিয়ে সর্বাধিক বাইট অর্জন করেছেন ।
ক্রিসসভ

1
@ ক্রিসসভ এই (?!…)এক্সপ্রেশনগুলি প্রতি কয়েকটি বাইট সংরক্ষণ করে। আমি তিনটি ধনাত্মক / নেতিবাচক সপ্তাহের-বছরের / দিনের-অফ-বছরের বছরের নিদর্শনগুলিকে প্রত্যেকটিতে এক করে বহু বাইট হ্রাস করেছি। শেষগুলি একে অপরের সাথে সামঞ্জস্য করে না। সুতরাং আমি 8 টি লম্বা উপ-নিদর্শনগুলি 5 এ নেমে এসেছি Also এছাড়াও, যেহেতু আমি আরও পঠনযোগ্য বিকল্পের জন্য যাচ্ছি তার |20|25|সমান দৈর্ঘ্য |2[05]|
সিজে ডেনিস

এই অভিব্যক্তিটি পরীক্ষার কেসের সাথে মিলে যায় -0000-08-10এবং ␠2015-08-10␠শীর্ষস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্পেসের সাথে মেলে না , তবে যেহেতু উভয়ই স্বেচ্ছাসেবী সিদ্ধান্ত বা alচ্ছিক বৈশিষ্ট্যগুলির কারণে আমি এটিকে স্লাইড করতে দেব।
ক্রিসসভ

আমি মনে করি ডাব্লু 50 এর মধ্যে এই সমাধানটির তারিখগুলির জন্য একটি বাগ রয়েছে।
ক্রিসসভ

W(?!00)([0-4]\d|51|52)-[1-7]সমতুল্য কিছু হতে হবে W(?!00)([0-4]\d|5[0-2])-[1-7]। এটি দৈর্ঘ্যে একটি অক্ষর যুক্ত করে। 779
ক্রিসোভ

9

PCRE: 603 940 947 949 956 বাইট

^\s*[+-]?(\d{4,10}-((00[1-9]|0[1-9]\d|[12]\d\d|3[0-5]\d|36[0-5])|(0[1-9]|1[0-2])-(0[1-9]|1\d|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31|W(0[1-9]|[1-4]\d|5[0-2])-[1-7]))|((\d{2,8}([13579][26]|[2468][048]|0[48])|(\d{0,6}([13579][26]|[02468][048])00))-(366|02-29))|(\+?\d{0,6}(([02468][048]|[13579][26])([26]0|71|[38]2|[49]3|[05]4|15|[27]6|37|[48]8|[09]9)|([02468][159]|[13579][37])(50|[16]1|[27]2|33|[48]4|[09]5|[15]6|67|[27]8|[38]9)|([02468][26]|[13579][048])([48]0|[09]1|[15]2|63|[27]4|[38]5|[49]6|[05]7|[16]8|29)|([02468][37]|[13579][159])([27]0|[38]1|[49]2|[05]3|[16]4|25|[37]6|87|[049]8|[5]9))|-\d{0,6}(([02468][048]|[13579][26])(0[28]|1[39]|24|3[06]|4[17]|5[28]|6[49]|75|8[06]|9[27])|([02468][159]|[13579][37])(0[49]|15|2[06]|3[27]|4[38]|54|6[05]|7[16]|8[28]|9[39])|([02468][26]|[13579][048])(0[51]|16|2[28]|3[39]|44|5[06]|6[17]|7[28]|8[49]|95)|([02468][37]|[13579][159])(0[17]|1[28]|2[49]|35|4[06]|5[27]|6[38]|74|8[05]|9[16])))-W53-[1-7]\s*$

দ্রষ্টব্য: কিছু জোড়া বন্ধনী সম্ভবত ফেলে দেওয়া যেতে পারে।

বিভাজন 4 দ্বারা

একটি সাধারণ প্যাটার্নে 4 টির গুণগুলি পুনরাবৃত্তি:

  • 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 ...

অগ্রণী শূন্য সহ সমস্ত দুই-অঙ্কের সংখ্যার জন্য এটি বা বিপরীতমুখী একই ধরণের সাধারণ নিয়মিত অভিব্যক্তির সাথে মিলে যায়:

(?<divisible-by-four>[13579][26]|[02468][048])
(?<not-divisible-by-four>[13579][048]|[02468][26]|\d[13579])

বিজোড় এবং এমনকি সংখ্যার জন্য (যেমন \oএবং \e) অক্ষরের ক্লাস থাকলে এটি কিছু বাইট সংরক্ষণ করতে পারে তবে আমি যতটা অবগত তা অবধি নেই।

বছর

জুলিয়ান ক্যালেন্ডারের জন্য এই অভিব্যক্তি যথেষ্ট হবে, তবে গ্রেগরিয়ান লিপ ইয়ার শনাক্তকরণের জন্য 004 -র মাধ্যমে শতাব্দীর বিভাজ্যতার ক্ষেত্রে বিশেষ ক্ষেত্রে হওয়া দরকার :

(?<leap-year>[+-]?(\d{2,8}([13579][26]|[2468][048]|0[48])|(\d{0,6}([13579][26]|[02468][048])00))
(?<year>[+-]?\d{4,10})

এর বাইরে কিছু পরিবর্তন -0000-…( -00000-…বা এর সাথে ) পরিবর্তন করতে হবে বা 4 টিরও বেশি সংখ্যা সহ ধনাত্মক বছরের সংখ্যাগুলির জন্য প্লাস সাইন প্রয়োগ করতে হবে। পরেরটি বরং সহজ হবে, তবে এটির প্রয়োজন নেই:

(?<leap-year>([+-]?(\d\d([13579][26]|[2468][048]|0[48])|(([13579][26]|[02468][048])00)))|([+-](\d{3,8}([13579][26]|[2468][048]|0[48])|(\d{1,6}([13579][26]|[02468][048])00))))
(?<year>([+-]?\d{4})|([+-]\d{5,10}))

বছরের দিন

তিন-সংখ্যার অর্ডিনাল তারিখগুলি বরং সহজ, আমাদের কেবল -366লিপ বছরগুলিতে সীমাবদ্ধ করতে হবে (এবং অস্বীকার করা -000)।

(?<ordinal-day>-(00[1-9]|0[1-9]\d|[12]\d\d|3[0-5]\d|36[0-5]))
(?<ordinal-leap-day>-366)

বছরের মাসের দিন

৩১ দিন সহ সাত মাস হ'ল 01জানুয়ারী, 03মার্চ, 05মে, 07জুলাই, 08আগস্ট, 10অক্টোবর এবং 12ডিসেম্বর। মাত্র চার মাসে ঠিক 30 দিন, 04এপ্রিল, 06জুন, 09সেপ্টেম্বর এবং 11নভেম্বর হয়। শেষ অবধি, 02ফেব্রুয়ারিতে সাধারণ বছরগুলিতে ২৮ দিন এবং লিপ বছরে ২৯ দিন থাকে। আমরা প্রথম সবসময় বৈধ দিনের জন্য একটি রেগুলার এক্সপ্রেশন গঠন করা যেতে পারে 01মাধ্যমে 28এবং তারপর বিশেষ ক্ষেত্রে যোগ করুন।

(?<month-day>-(0[1-9]|1[0-2])-(0[1-9]|1\d|2[0-8]))
(?<short-month-day>-(0[13-9]|1[0-2])-(29|30))
(?<long-month-day>-(0[13578]|1[02])-31)
(?<month-leap-day>-02-29)

মাস বা দিন অবশ্যই 00নয় যা পূর্ববর্তী সংস্করণ দ্বারা আচ্ছাদিত ছিল না।

বছরের সপ্তাহের দিন

সমস্ত বছর 52 সপ্তাহ অন্তর্ভুক্ত

(?<week-day>-W(0[1-9]|[1-4]\d|5[0-2])-[1-7])

দীর্ঘ বছর যা-W53 400 বছরের চক্রের পুনরাবৃত্তি অন্তর্ভুক্ত করে , উদাহরণস্বরূপ বর্তমান চক্রের জন্য 2000 যুক্ত করুন এবং তৃতীয় এন্ট্রিতে বর্তমান বছরটি সন্ধান করুন:

  • 004, 009, 015, 020, 026, 032, 037, 043, 048, 054, 060, 065, 071, 076, 082, 088, 093, 099,
  • 105, 111, 116, 122, 128, 133, 139, 144, 150, 156, 161, 167, 172, 178, 184, 189, 195,
  • 201, 207, 212, 218, 224, 229, 235, 240, 246, 252, 257, 263, 268, 274, 280, 285, 291, 296,
  • 303, 308, 314, 320, 325, 331, 336, 342, 348, 353, 359, 364, 370, 376, 381, 387, 392, 398

চার শতাব্দীর প্রত্যেকটিরই একটি অনন্য নিদর্শন রয়েছে। অপ্টিমাইজেশনের জন্য সম্ভবত খুব বেশি জায়গা নেই।

  1. 04|09|15|20|26|32|37|43|48|54|60|65|71|76|82|88|93|99
  2. 05|11|16|22|28|33|39|44|50|56|61|67|72|78|84|89|95
  3. 01|07|12|18|24|29|35|40|46|52|57|63|68|74|80|85|91|96
  4. 03|08|14|20|25|31|36|42|48|53|59|64|70|76|81|87|92|98

আমরা দুটি বাইট বা তাই সংরক্ষণ করতে পারি তা জানতে আমরা দুটি সংখ্যার দ্বারা গ্রুপ করতে পারি:

  • 1 ম সংখ্যা দ্বারা দলবদ্ধ।
    1. 0[49]|15|2[06]|3[27]|4[38]|54|6[05]|7[16]|8[28]|9[39]
    2. 05|1[16]|2[28]|3[39]|44|5[06]|6[17]|7[28]|8[49]|95
    3. 0[17]|1[28]|2[49]|35|4[06]|5[27]|6[38]|74|8[05]|9[16]
    4. 0[38]|14|2[05]|3[16]|4[28]|5[39]|64|7[06]|8[17]|9[28]
  • ২ য় অঙ্ক অনুসারে গোষ্ঠীভুক্ত।
    1. [26]0|71|[38]2|[49]3|[05]4|15|[27]6|37|[48]8|[09]9
    2. 50|[16]1|[27]2|33|[48]4|[09]5|[15]6|67|[27]8|[38]9
    3. [48]0|[09]1|[15]2|63|[27]4|[38]5|[49]6|[05]7|[16]8|29
    4. [27]0|[38]1|[49]2|[05]3|[16]4|25|[37]6|87|[049]8|[5]9

বিভাজন প্রকাশের ভিন্নতার দ্বারা শতাব্দীর সংখ্যাটি সহজেই আবার মিলিত হয়।

  • 1 ম শতাব্দী: [02468][048]|[13579][26]
  • ২ য় শতাব্দী: [02468][159]|[13579][37]
  • তৃতীয় শতাব্দী: [02468][26]|[13579][048]
  • চতুর্থ শতাব্দী: [02468][37]|[13579][159]

এখনও অবধি, এটি কেবল বছর শূন্য সহ ইতিবাচক বছরের জন্য কাজ করে। নেতিবাচক বছরগুলির জন্য, আমাদের উপরের তালিকা থেকে মানগুলি 400 থেকে বিয়োগ করতে হবে এবং বাকিগুলি আবার করতে হবে, কারণ প্যাটার্নটি প্রতিসাম্য নয়।

  1. 02|08|13|19|24|30|36|41|47|52|58|64|69|75|80|86|92|97
  2. 04|09|15|20|26|32|37|43|48|54|60|65|71|76|82|88|93|99
  3. 05|11|16|22|28|33|39|44|50|56|61|67|72|78|84|89|95
  4. 01|07|12|18|24|29|35|40|46|52|57|63|68|74|80|85|91|96

অথবা

  1. 0[28]|1[39]|24|3[06]|4[17]|5[28]|6[49]|75|8[06]|9[27]
  2. 0[49]|15|2[06]|3[27]|4[38]|54|6[05]|7[16]|8[28]|9[39]
  3. 0[51]|16|2[28]|3[39]|44|5[06]|6[17]|7[28]|8[49]|95
  4. 0[17]|1[28]|2[49]|35|4[06]|5[27]|6[38]|74|8[05]|9[16]

সবগুলোকে একত্রে রাখ

যে কোনও বছর

[+-]?\d{4,10}-((00[1-9]|0[1-9]\d|[12]\d\d|3[0-5]\d|36[0-5])|(0[1-9]|1[0-2])-(0[1-9]|1\d|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31|W(0[1-9]|[1-4]\d|5[0-2])-[1-7])

লিপ-ডে বছরের সংযোজন

[+-]?(\d{2,8}([13579][26]|[2468][048]|0[48])|(\d{0,6}([13579][26]|[02468][048])00))-(366|02-29)

লিপ-সপ্তাহ বছরের সংযোজন

+?\d{0,6}(([02468][048]|[13579][26])([26]0|71|[38]2|[49]3|[05]4|15|[27]6|37|[48]8|[09]9)|([02468][159]|[13579][37])(50|[16]1|[27]2|33|[48]4|[09]5|[15]6|67|[27]8|[38]9)|([02468][26]|[13579][048])([48]0|[09]1|[15]2|63|[27]4|[38]5|[49]6|[05]7|[16]8|29)|([02468][37]|[13579][159])([27]0|[38]1|[49]2|[05]3|[16]4|25|[37]6|87|[049]8|[5]9))-W53-[1-7]
-\d{0,6}(([02468][048]|[13579][26])(0[28]|1[39]|24|3[06]|4[17]|5[28]|6[49]|75|8[06]|9[27])|([02468][159]|[13579][37])(0[49]|15|2[06]|3[27]|4[38]|54|6[05]|7[16]|8[28]|9[39])|([02468][26]|[13579][048])(0[51]|16|2[28]|3[39]|44|5[06]|6[17]|7[28]|8[49]|95)|([02468][37]|[13579][159])(0[17]|1[28]|2[49]|35|4[06]|5[27]|6[38]|74|8[05]|9[16]))-W53-[1-7]

আপনার প্যাটার্নটি শুরু এবং শেষদিকে নোঙ্গর করা হয়নি, সুতরাং এটি অন্যথায় অবৈধ স্ট্রিংয়ের সাথে বৈধ তারিখগুলির সাথে মিলবে।
সিজে ডেনিস

@ সিজেডেনিস এটি সত্য, আমি এখন দুটি চরিত্র যুক্ত করব।
ক্রিসসভ

আমি leadingচ্ছিক নেতৃস্থানীয় এবং পিছনের স্থানগুলিও যুক্ত করেছি \s*
ক্রিসসভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.