একটি বৈধ বছরের জন্য পরীক্ষার জন্য নিয়মিত এক্সপ্রেশন ম্যাচ


91

একটি মান দেওয়া হয়েছে আমি এটি বৈধ বছর কিনা তা যাচাই করতে এটি বৈধ করতে চাই। আমার মানদণ্ডটি সহজ যেখানে মানটি 4অক্ষরের সাথে পূর্ণসংখ্যা হওয়া উচিত । আমি জানি এটি সর্বোত্তম সমাধান নয় কারণ এটি বছরগুলিতে মঞ্জুরি দেয় না 1000এবং বছরের জন্য অনুমতি দেয় 5000। এই মানদণ্ডটি আমার বর্তমান দৃশ্যের জন্য পর্যাপ্ত।

আমি যা নিয়ে এসেছি তা হ'ল

\d{4}$

যদিও এটি কাজ করে এটি নেতিবাচক মানকেও অনুমোদন করে।

আমি কীভাবে নিশ্চিত করতে পারি যে কেবলমাত্র ইতিবাচক পূর্ণসংখ্যার অনুমতি রয়েছে?


fww আমি একটি নোড.জেএস প্রকল্প তৈরি করেছি, স্বয়ংক্রিয়ভাবে এই ব্যাপ্তিগুলি তৈরি করতে টু-রেজেক্স- রেঞ্জ। এটি আপনার মনে হতে পারে তার চেয়ে বেশি শক্তিশালী যে কয়েক বছরের জন্য পরীক্ষা করার জন্য আপনার যদি রেইজেক্স তৈরি করতে হয়।
jonschlinkert

কেন আপনার বৈধতা 4 ডিজিট বছরের মধ্যে সীমাবদ্ধ? লম্বনো.অর্গ
ডান মন্দির

উত্তর:


77

আপনাকে এই ^হিসাবে একটি সূচনা অ্যাঙ্কর যুক্ত করতে হবে :

^\d{4}$

আপনার রেজেক্স 4 টি সংখ্যার সাথে শেষ হওয়া\d{4}$ স্ট্রিংগুলির সাথে মিলবে । সুতরাং মত ইনপুট -1234গ্রহণ করা হবে।

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


4
ধিক! খনি এতটা ত্রুটিযুক্ত ছিল যে এটি গ্রহণও করতে পারত whateverblahblah2323। এখন আমি বুঝতে পারি যে কেন সামান্য
পড়াশুনা

62
এটি 10,000 বছরের মধ্যে ভাঙ্গবে।
sferik

16
@ স্পেরিক: কিছু যায় আসে না। মূল পোস্টারটিতে সুনির্দিষ্টভাবে বলা হয়েছিল যে তিনি চারটি চরিত্রের জন্য যাচাই করতে চেয়েছিলেন। তিনি উল্লেখ করেননি যে তিনি চান যে 10,000 বছরটি বৈধ ইনপুট হোক, তাই গ্রহণ 10000করা একটি বাগ হবে।
মার্কাস্ক

4
@ স্পারিক: ততক্ষণে প্রোগ্রামটি শতাব্দী ধরে চলে যাবে। যদি তা না হয় তবে ভবিষ্যতে 9,000 বছর চিন্তা করা ভাল। YAGNI নীতি অনুসরণ করে, পদ্ধতিটি বৈধ।
ফিল

183

বছরগুলি 1000 থেকে 2999 পর্যন্ত

^[12][0-9]{3}$

1900-2099 এর জন্য

^(19|20)\d{2}$

14
এটি একটি আরও ভাল সমাধান
mk_89

10
আমি নন-ক্যাপচারিং গ্রুপটি ব্যবহার করা আরও ভাল:^(?:19|20)\d{2}$
এল্ডার আগালরভ

২০১১ এবং ২০৯৯ এর মধ্যে আমি কীভাবে একটি 4 ডিজিট বছরের বৈধতা দেব?
এমকিউইম

(19|20)\d{2}একটি জন্ম তারিখের ফর্ম্যাটটি বৈধকরণের জন্য আমি কীভাবে আমার রেজেক্সে যুক্ত করতে পারি? এটি আমার রেজেক্স /^[0-9]{1,2}\/(0[1-9])|(1[0-2])\/[0-9]{4}$/আমি এটি নিশ্চিত করতে চাই যে বছরটি সর্বদা 4 সংখ্যার রয়েছে এবং 19 ** বা 20 **
মরে যেতে

1900 - 2999 বছরের জন্য
Z

22

এই প্রশ্নের "গৃহীত" উত্তরটি ভুল এবং মায়োপিক উভয়ই।

এটি ভুল যে এটির মতো স্ট্রিংগুলির সাথে মেলে 0001যা কোনও বৈধ বছর নয়।

এটি মায়োপিক যে এটি 9999 এর উপরে কোনও মানের সাথে মেলে না। আমরা কি ইতিমধ্যে ওয়াই 2 কে এর পাঠগুলি ভুলে গেছি ? পরিবর্তে, নিয়মিত প্রকাশটি ব্যবহার করুন:

^[1-9]\d{3,}$

আপনার যদি ভবিষ্যতের বছরগুলি ছাড়াও অতীতে বছরের সাথে মিল রাখতে হয় তবে আপনি কোনও ধনাত্মক পূর্ণসংখ্যার সাথে মেলে এই নিয়মিত প্রকাশটি ব্যবহার করতে পারেন:

^[1-9]\d*$

আপনি অতীতের তারিখগুলি প্রত্যাশা না করলেও, আপনি যে কোনও উপায়ে টাইম মেশিন আবিষ্কার করেন এবং আপনার সফ্টওয়্যারটি তাদের সাথে ফিরিয়ে নিতে চান সে ক্ষেত্রে আপনি এই নিয়মিত প্রকাশটি যেভাবেই ব্যবহার করতে পারেন want

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

^-?[1-9]\d*$

4
না, সম্ভবত এটি হবে না। তবে কারও (প্রত্নতাত্ত্বিক? ইতিহাসবিদ?) 8000 বছর আগে বছরের জন্য ম্যাচ করাতে পারে। : ডি এবং ডক ব্রাউন এর দরকার হতে পারে ...
যায়েম

4
আমি এটি 1000-9999 range [1-9] \\ d {3} $ থিম থেকে সীমাবদ্ধ করতে ব্যবহার করেছি কারণ যে অ্যাপ্লিকেশনটিতে আমাদের তথ্য সরবরাহ করতে হবে, কেবলমাত্র 4 সংখ্যার সংখ্যা গ্রহণ করবে :(
ম্যাটপ্যাগ

দুর্দান্ত উত্তর। আমি নিম্নলিখিতটি 0 সালটি গ্রহণের জন্যও তৈরি করব: ^ (-? [1-9] \ d * | 0) $
Kosta Kontos

10

এটি 1900 থেকে 2099 এর জন্য কাজ করে:

/(?:(?:19|20)[0-9]{2})/

আমার কাছে দেখে মনে হচ্ছে এটি কেবল 2099 এ যাবে B
DeanOC

বাহ, 2099 আমি যা বোঝাতে চাইছি তা হল। ধন্যবাদ এবং এখন আমি ইতিবাচক পূর্ণসংখ্যার অংশটি দেখতে পাচ্ছি।
jonschlinkert

আমি একটি প্রকল্প সৃষ্টি টু-Regex পরিসরের স্বয়ংক্রিয়ভাবে এই রেঞ্জ তৈরি করতে
jonschlinkert

5

1970-99 বছরের জন্য @ r92 উত্তরে বিল্ডিং:

(19[789]\d|20[01]\d)

আপনার উত্তর দেয়197999
avalanche1

আমি মনে করি না এটি হয় ... রেজেক্সের প্রথম অংশটি 19 টি দিয়ে শুরু হয়, তারপরে 7,8 বা 9 এর মধ্যে একটিও পরে একটি একক সংখ্যা। রেজেক্স 19[789]\d\d\dঅনুমতি দেবে197999
রেনেউদ

4
/(19[789]\d|20[01]\d)/.test(1970324) >> true
হিমস্রোত 1

হ্যাঁ, এটি প্রথম 4 সংখ্যার সাথে মিলবে ( 1970), শেষটি নয় 3. কী (19[789]\d|20[01]\d)[^0-9]? এটি মিলবে 1970 324তবে মিলবে না1970324
রেনাড

4
আমি একটি ফাইলের নাম থেকে চলচ্চিত্র বছরের সন্ধানের জন্য এটি দরকারী বলে খুঁজে পেয়েছি ... এক্ষেত্রে আমরা 1930-এর দশক থেকে জিনিস চাই ... তবে আমরা ভিডিও মানের জন্য শেষ পর্যন্ত যুক্ত করা 1024 বাদ দিয়েছি
অ্যাড্রিয়ান হুম

2

তত্ত্বের ক্ষেত্রে 4 ডিজিটের বিকল্পটি সঠিক। তবে অনুশীলনে 1900-2099 সীমা থাকা ভাল।

অতিরিক্তভাবে এটি নন-ক্যাপচারিং গ্রুপ হওয়া দরকার। অনেক মন্তব্য এবং উত্তর ক্যাপচার গ্রুপিং প্রস্তাব যা সঠিক IMHO নয়। কারণ মিলের জন্য এটি কাজ করতে পারে তবে রেজেক্স ব্যবহার করে ম্যাচগুলি বের করার জন্য এটি প্যারেন্টেসিসের কারণে 4 সংখ্যার নম্বর এবং দুটি অঙ্ক (19 এবং 20) সংখ্যাগুলি বের করবে।

এটি নন-ক্যাপচারিং গ্রুপগুলি ব্যবহার করে সঠিক মিলের জন্য কাজ করবে:

(?:19|20)\d{2}


1

আপনি sth এর মত যেতে পারেন [ ^-]\d{4}$: আপনি বিয়োগ চিহ্নটি -আপনার 4 টি সংখ্যার আগে হওয়া আটকাবেন।
আপনার কাছে ব্যবহার করতে পারেন ^\d{4}$সঙ্গে ^স্ট্রিংয়ের শুরু ধরা। এটি আসলে আপনার দৃশ্যের উপর নির্ভর করে ...


1

একটি স্ট্রিংয়ে এক বছর পরীক্ষা করতে যাতে বছরের সাথে অন্যান্য শব্দের সমন্বিত থাকে আপনি নীচের রেজেক্স ব্যবহার করতে পারেন: \ b \ d {4} \ b


এটি আমার প্রয়োজন ঠিক ছিল, গৃহীত উত্তরটি বৈধ পিসিআরই বলে মনে হচ্ছে না।
প্রমিথিউস

1

ব্যবহার;

^(19|[2-9][0-9])\d{2}$ 

1900 - 9999 বছর ধরে।

9999 এবং এর পরের জন্য চিন্তা করার দরকার নেই - এআই এর পরে সমস্ত প্রোগ্রামিং করা হবে !!! হিহেহেহে

আপনি https://regex101.com/ এ আপনার রেজেক্স পরীক্ষা করতে পারেন

ক্যাপচার না করা গ্রুপগুলি সম্পর্কে আরও তথ্য (উপরে একটি মন্তব্যে উল্লিখিত) এখানে http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm


0

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


0

আমি জাভাতে এই রেজেক্স ব্যবহার করি ^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$

1900 থেকে 9999 পর্যন্ত কাজ করে


0

/ ^ \ d {4} $ / এটি স্ট্রিংয়ে কেবল 4 টি সংখ্যা নিয়ে গঠিত কিনা তা পরীক্ষা করে দেখবে। এই পরিস্থিতিতে, 989 বছর ইনপুট করতে আপনি পরিবর্তে 0989 দিতে পারেন।


0

আপনি যদি YYYY বা YYYYMMDD এর সাথে মেলে প্রয়োজন হয় আপনি ব্যবহার করতে পারেন:

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

0

আপনি এটি ব্যবহার করতে পারেন।

([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)

তারা কেবল বছরের সাথে ম্যাচ করতে চায়। তদুপরি আপনার রেজেক্স মেলে 00/00/2000বা 31/02/1999আরও অনেক ভুয়া তারিখ।
পুরো

আপনাকে সাহায্য করতে পারে ([0-2] [0-9] | 3 [0-1]) \ / ([0-1] [0-2]) \ / (19 [789] \ d | 20 [01 ] \ d)
রণজিৎ চৌহান

(0[1-9]|1[0-2])মাসের জন্য এটি আরও অনেক ভাল প্রকাশ
EZ-C
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.