পাসওয়ার্ডটি "1 টি বড় অক্ষর, 1 টি বিশেষ অক্ষর, বর্ণানুক্রমিক অক্ষর সহ 8 টি অক্ষর" আছে কিনা তা পরীক্ষা করার জন্য নিয়মিত অভিব্যক্তি


102

আমি এটি পরীক্ষা করার জন্য একটি নিয়মিত প্রকাশ চাই

একটি পাসওয়ার্ড অবশ্যই একটি বড় হাতের অক্ষর, একটি বিশেষ অক্ষর এবং বর্ণমালা অক্ষর সহ আটটি অক্ষর হতে হবে।

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

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

আমি কীভাবে এটি এমন পাসওয়ার্ডের জন্য লিখতে পারি যা একটি অক্ষরের অক্ষর, একটি বিশেষ অক্ষর এবং বর্ণচিহ্নগুলি সহ আটটি অক্ষর হতে হবে?


26
এর জন্য আপনার নিয়মিত প্রকাশের প্রয়োজন কেন? আপনার প্রয়োজনীয়তার সাথে মেলে একটি সম্পূর্ণ নিয়মিত প্রকাশটি খুব দীর্ঘ এবং জটিল হবে। সি # কোডে আপনার সীমাবদ্ধতা লিখতে আরও সহজ।
গ্রেগ হিউগিল

32
আপনি কি শক্তিশালী পাসওয়ার্ড যাচাইয়ের পরিবর্তে পাসওয়ার্ডটি কিছু স্বেচ্ছাসেবী নিয়ম মেলে যা শক্তিশালী পাসওয়ার্ডের জন্য একটি অসম্পূর্ণ প্রক্সি? প্রচুর লাইব্রেরি এবং প্রোগ্রাম রয়েছে যা একটি পাসওয়ার্ড খাওয়ানো হলে এর শক্তি নির্ধারণ করে।
ওয়েইন কনরাড

4
@ গ্রেগ হিউগিল আমি যদি আপনার মন্তব্যটি আপত্তি জানাতে পারি তবে :-) এটি "আপনার যদি সমস্ত হাতুড়ি হয় তবে সবকিছুই পেরেকের মতো দেখতে শুরু করবে" এর অন্যরকম একটি পরিস্থিতি বলে মনে হচ্ছে।
খ্রিস্টান.কে

3
আপনার কি ঠিক একটি বড় হাতের অক্ষর / বিশেষ চরিত্র বা কমপক্ষে একটি দরকার?
মিমডিমিরবাস

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

উত্তর:


132

আপনার পরে যে নিয়মিত অভিব্যক্তিটি সম্ভবত তা সম্ভবত বিপুল এবং একটি দুঃস্বপ্ন বজায় রাখার জন্য বিশেষত এমন লোকদের জন্য যারা নিয়মিত প্রকাশের সাথে তেমন পরিচিত নন।

আমি মনে করি আপনার রেজেক্সকে ভেঙে ফেলা এবং একবারে এটি কিছুটা করা সহজ হবে। এটি করতে আরও কিছুটা সময় লাগতে পারে তবে আমি নিশ্চিত যে এটি বজায় রাখা এবং এটির ডিবাগ করা আরও সহজ হবে। এটি আপনাকে আপনার ব্যবহারকারীদেরকে আরও নির্দেশিত ত্রুটি বার্তা সরবরাহ করার অনুমতি দেবে (ন্যায়বিচার ব্যতীত Invalid Password) যা ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারে।

আমি আপনাকে যা দেখতে পাচ্ছি তা থেকে রেগেক্সে বেশ সাবলীল, তাই আমি ধরে নেব যে আপনার যা প্রয়োজন তা করার জন্য আপনাকে নিয়মিত এক্সপ্রেশন দেওয়া নিরর্থক হবে।

আপনার মন্তব্য দেখে, আমি এটি সম্পর্কে এইভাবে যাব:

  • আটটি অক্ষর লম্বা হওয়া উচিত: এর জন্য আপনার একটি রেজেেক্সের দরকার নেই। .Lengthসম্পত্তি ব্যবহার করা যথেষ্ট হবে।

  • একটি বড় হাতের অক্ষর সহ: আপনি [A-Z]+নিয়মিত প্রকাশটি ব্যবহার করতে পারেন । যদি স্ট্রিংয়ে কমপক্ষে একটি বড় হাতের অক্ষর থাকে তবে এই নিয়মিত অভিব্যক্তি পাওয়া যাবে true

  • একটি বিশেষ চরিত্র: আপনি \Wঅক্ষর বা সংখ্যার নয় এমন কোনও বর্ণের সাথে মেলে যা ব্যবহার করতে পারেন [!@#], বিশেষ অক্ষরের কাস্টম তালিকা নির্দিষ্ট করতে আপনি এর মতো কিছু ব্যবহার করতে পারেন । নোট যদিও যেমন যে অক্ষর $, ^, (এবং )তাই তারা তাই মত পলান করা প্রয়োজন, রেগুলার এক্সপ্রেশন ভাষায় বিশেষ অক্ষর আছেন: \$। সংক্ষেপে, আপনি ব্যবহার করতে পারেন \W

  • বর্ণানুক্রমিক অক্ষর: \w+কোনও অক্ষর এবং সংখ্যা এবং আন্ডারস্কোরের সাথে মিলটি ব্যবহার করা উচিত।

কটাক্ষপাত এই আরও তথ্যের জন্য টিউটোরিয়াল।


2
আমি এটি আমার নিজের লেখা নেই, আমি এটি গুগল প্রিয় বন্ধুটি থেকে পেয়েছি
রানিয়া উমার

4
@ রানিয়াউমার: আমি মনে করি আপনার মন্তব্যটি আমার বক্তব্য প্রমাণ করেছে। আমি আপনাকে সুপারিশ করব যে আমি এটি নির্দিষ্ট করে দিয়েছি এটি ভেঙে দিন।
npinti

35
+1 রেজেক্স শক্তিশালী, তবে মহাবিশ্বের কোনও সমস্যা সমাধানের জন্য বোঝানো হয়নি
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf: আমি আরও একমত হতে পারি না। রেজেক্স শক্তিশালী, তবে এটি খুব জটিল হয়ে ওঠে, সুতরাং এটি আরও সহজ রাখুন।
এনপিন্টি

আপনি কি আমাকে সাহায্য করতে পারেন আমাকে এমন একটি রেজেক্স দরকার যা কমপক্ষে একটি সংখ্যা গ্রহণ করে এবং সর্বোচ্চ 3 অন্যান্য পাঠক যে কোনও কিছু হতে পারে
লিজো

107
(                   # Start of group
    (?=.*\d)        #   must contain at least one digit
    (?=.*[A-Z])     #   must contain at least one uppercase character
    (?=.*\W)        #   must contain at least one special symbol
       .            #     match anything with previous condition checking
         {8,8}      #        length is exactly 8 characters
)                   # End of group

এক লাইনে:

((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})

2019-05-28 সম্পাদনা করুন:

আপনার পুরো ইনপুট স্ট্রিংটি মিলাতে হবে। সুতরাং, আপনি দুর্ঘটনাক্রমে পুরো ইনপুটটির সাথে মিল রেখে আংশিক ম্যাচগুলি ধরে নেওয়া রোধ করতে ^এবং এর মধ্যে রেজেক্সটি আবদ্ধ করতে পারেন $:

^((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})$

সূত্র:


58
কারণ এটি 12 টি অক্ষর নিয়ে গঠিত
মিমডিমিরবাস

আরও একটি শর্ত ডিজিট দিয়ে শুরু করা উচিত নয় আমি কীভাবে এটি করতে পারি?
লিজো

7
আপনি 8 টি অক্ষর মেলে to 8 using ব্যবহার করে এটি ছোট করতে পারেন
অ্যাঞ্জেলো ট্রিকারিকো

এর মিলটি $ 1eerrrrrrr এর সাথে .. এর কোনও বড় হাতের অক্ষর নেই।
শিল্পী জয়সওয়াল

@ শিল্পী জয়সওয়াল হয় আপনি কেস-সংবেদনশীল ম্যাচের জন্য পতাকা ব্যবহার করছেন, বা "ম্যাচ" এর পরিবর্তে একটি "অনুসন্ধান" করছেন। আপনি পুরো ইনপুট স্ট্রিংয়ের সাথে মিলছেন তা নিশ্চিত করতে, আপনি ^এবং এর মধ্যে রেজেেক্সটি বন্ধ করতে পারেন $। এটি চেষ্টা করুন:^((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})$
মিমডিমিরবাস

35

এত উত্তর .... সব খারাপ!

নিয়মিত এক্সপ্রেশনগুলির একটি অ্যান্ড অপারেটর নেই, সুতরাং বৈধ পাসওয়ার্ডগুলির সাথে মিলে এমন একটি রেইগেক্স লিখতে পারা বেশ কঠিন, যখন বৈধতা কোনও কিছু এবং অন্য কোনও কিছুর দ্বারা নির্ধারিত হয় ...

কিন্তু রেগুলার এক্সপ্রেশনের না একটি বা অপারেটর, তাই শুধু DeMorgan এর উপপাদ্য প্রয়োগ, এবং একটি Regex যে মিলগুলি লেখার অবৈধ পাসওয়ার্ড।

8 টিরও কম অক্ষরযুক্ত কোনও কিছু বা কোনও সংখ্যা নেই বা কোনও বড় হাতের কোনও কিছুই নেই OR কোন বিশেষ অক্ষর সাথে কাউকে

তাই:

^(.{0,7}|[^0-9]*|[^A-Z]*|[a-zA-Z0-9]*)$

যদি কিছু এর সাথে মেলে তবে এটি একটি অবৈধ পাসওয়ার্ড।


3
যদি ওপি ঠিক 8 টি অক্ষর চাইত, তাই আপনাকে যুক্ত করতে হবে |.{9,}। ধারণার জন্য +1
ড্যানিয়েল

প্রশ্নের দুর্দান্ত এবং সাধারণ সমাধান, যদিও আমি একমত হই যে একটি নিয়মিত অভিব্যক্তি আসল সমস্যার জন্য সর্বোত্তম নয়।
সিডোরাইট জ্যাকওয়ার্ডেডেক্স

1
রেগুলার এক্সপ্রেশন না আছে এবং অপারেটর, তারা lookahead / lookbehind গবেষকেরা বলে ডাকা হয়।
অপেক্ষাকৃত_রান্দম

13

উত্তরটি হ'ল নিয়মিত ভাব প্রকাশ না করা। এটি সেট এবং গণনা।

নিয়মিত প্রকাশগুলি অর্ডার সম্পর্কে are

একজন প্রোগ্রামার হিসাবে আপনার জীবনে আপনি এমন অনেকগুলি কাজ করতে বলবেন যা বোধগম্য নয়। আরও গভীর স্তর খুঁড়তে শিখুন। প্রশ্নটি ভুল হলে শিখুন।

প্রশ্ন (যদি এটি নিয়মিত প্রকাশের কথা উল্লেখ করা থাকে) ভুল is

সিউডোকোড (দেরিতে অনেকগুলি ভাষার মধ্যে স্যুইচ করা হয়েছে):

if s.length < 8:
    return False
nUpper = nLower = nAlphanum = nSpecial = 0
for c in s:
    if isUpper(c):
        nUpper++
    if isLower(c):
        nLower++
    if isAlphanumeric(c):
        nAlphanum++
    if isSpecial(c):
        nSpecial++
return (0 < nUpper) and (0 < nAlphanum) and (0 < nSpecial)

উপরের কোডটি প্রায় তাত্ক্ষণিকভাবে আপনি পড়তে এবং বুঝতে পারছেন Bet রেজিস্টের সাথে আপনি অনেক বেশি সময় নিয়েছিলেন এবং এটি সঠিক যে কম তা নিশ্চিত। রেজেক্স প্রসারিত করা ঝুঁকিপূর্ণ। তাত্ক্ষণিকভাবে উপরে প্রসারিত, এত কম।

নোটটিও প্রশ্নটি সঠিকভাবে বর্ণিত হয়। চরিত্রটি ASCII বা ইউনিকোড সেট করেছে, বা ?? প্রশ্নটি পড়ে আমার অনুমান যে কমপক্ষে একটি ছোট হাতের অক্ষর অনুমান করা হয়। সুতরাং আমি মনে করি ধরে নেওয়া শেষ নিয়মটি হওয়া উচিত:

return (0 < nUpper) and (0 < nLower) and (0 < nAlphanum) and (0 < nSpecial)

(সুরক্ষা কেন্দ্রিক করে টুপি পরিবর্তন করা, এটি সত্যিই সত্য বিরক্তিকর / কার্যকর নিয়ম নয়))

প্রশ্নটি কখন ভুল তা জানতে শেখা চতুর উত্তরের চেয়ে ব্যাপকভাবে গুরুত্বপূর্ণ। ভুল প্রশ্নের একটি চতুর উত্তর প্রায় সবসময়ই ভুল।


2
আমি রাজী. আপনি যত বেশি লোকের সাথে কাজ করছেন, তত বেশি কোডের পাঠযোগ্য হওয়া দরকার যদিও উত্তর হিসাবে আমি দেখেছি কিছু রেজিএক্সএক্স বাস্তবায়ন
নিকোলা পেলুচেটি

আমি পছন্দ করি যে আপনার মতো কিছু ব্যবহারকারীর বলার সাহস আছে যে রেগেক্স সর্বদা প্রয়োগের চেয়ে ভাল সমাধান নয় এবং কোনও সময়, সাধারণ প্রোগ্রামিংটি আরও পঠনযোগ্য।
স্ক্লেবে

12

উদাহরণস্বরূপ কীভাবে এটি পঠনযোগ্য / রক্ষণাবেক্ষণযোগ্য রেগেক্সের সাহায্যে করা যায়।

দীর্ঘ পুনর্নির্মাণের জন্য আপনাকে RegexOptions.IgnorePatternWhitespaceআরও ভাল পাঠযোগ্যতার জন্য অভিব্যক্তিটিতে সাদা স্থান এবং মন্তব্যের অনুমতি দেওয়ার জন্য সর্বদা ব্যবহার করা উচিত ।

String[] passwords = { "foobar", "Foobar", "Foobar1", "Fooobar12" };

foreach (String s in passwords) {

    Match password = Regex.Match(s, @"
                                      ^              # Match the start of the string
                                       (?=.*\p{Lu})  # Positive lookahead assertion, is true when there is an uppercase letter
                                       (?=.*\P{L})   # Positive lookahead assertion, is true when there is a non-letter
                                       \S{8,}        # At least 8 non whitespace characters
                                      $              # Match the end of the string
                                     ", RegexOptions.IgnorePatternWhitespace);

    if (password.Success) {
        Console.WriteLine(s + ": valid");
    }
    else {
        Console.WriteLine(s + ": invalid");
    }
}

Console.ReadLine();

lookahead assertionএকক রেজেক্সের মধ্যে পুরো সীমাবদ্ধতাটি coverাকতে "এবং" ধরণের ধরণ হিসাবে এটি ব্যবহারের সর্বোত্তম উপায় । আরও সীমাবদ্ধতার জন্য কাজ করে এবং কনফিগারেশনের মাধ্যমে কিছু সীমাবদ্ধতা সক্ষম / অক্ষম করা উচিত তবে সহজেই উত্পন্ন করা যায়।
22:40

2
ইউনিকোড বিভাগগুলির ব্যবহার একটি দুর্দান্ত ধারণা। এএসসিআইআইয়ের চেয়ে বিশ্ব বিস্তৃত!
ওয়াল্টার ট্রস

1

আপনার যদি কেবলমাত্র একটি উচ্চতর কেস এবং বিশেষ চরিত্রের প্রয়োজন হয় তবে এটি কাজ করা উচিত:

@"^(?=.{8,}$)(?=[^A-Z]*[A-Z][^A-Z]*$)\w*\W\w*$"

স্ট্রিংটি AAaaaaaaa#এই অভিব্যক্তি অনুযায়ী ঠিক নেই
ক্রিশ্চিয়ান লুপাস্কু

3
ভাল, এটি 10 ​​টি নয়, 8 টি অক্ষরের দীর্ঘ এবং এতে একাধিক আপার কেস রয়েছে, সুতরাং এটি ব্যর্থ হওয়া উচিত ...
ব্যবহারকারীর 1096188

4
আপনি ঠিক হয়, এটা নেই প্রশ্নে এই কথা বলছি। আমি ভেবেছিলাম এই নিয়ম আরো ভালো ছিল "অন্তত একটি বড় হাতের" পরিবর্তে "ঠিক একটি বড় হাতের" । আমি নিশ্চিত নই যে ওপি যদিও এটি চেয়েছিল।
ক্রিশ্চিয়ান লুপাস্কু

1

রেগুলার এক্সপ্রেশন আপনি এ খুঁজছেন হয়: /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*\[\]"\';:_\-<>\., =\+\/\\]).{8,}$/u

উদাহরণ এবং পরীক্ষা: http://regexr.com/3fhr4


স্পেস অনুমোদিত
সুইমবার্গার

1
@sniels শুধু পরিবর্তন .করার আগে {8,}থেকে [^\s]
লুকাস সিলভা

0

এই প্রশ্নটি ভাইরাল হতে শুরু করে এবং প্রচুর আকর্ষণীয় পরামর্শ হাজির।

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

এই লিঙ্কগুলি আকর্ষণীয় হতে পারে: কোনও স্ট্রিংয়ে কমপক্ষে 2 অঙ্ক 2 অক্ষরের সাথে মিল করুন , নিয়মিত এক্সপ্রেশন ভাষা , ক্যাপচারিং গ্রুপগুলি

আমি (?=(?:.*?({type})){({count})})এসওতে দেখেছি এমন সমস্ত রেগেক্সের ভিত্তিতে এই টেম্পলেটটি ব্যবহার করছি । পরবর্তী পদক্ষেপটি প্রয়োজনীয় প্যাটার্নটি প্রতিস্থাপন করছে ( number,special character ...) এবং দৈর্ঘ্যের জন্য কনফিগারেশন যুক্ত করছে।

আমি রেজিএক্স পাসওয়ার্ডরেজজেনারেটর.সি . রাইজ করার জন্য একটি ছোট্ট ক্লাস করেছি একটি উদাহরণ:

string result = new PasswordRegexGenerator ( )
        .UpperCase ( 3, -1 )    // ... {3,}
        .Number ( 2, 4 )        // ... {2,4}
        .SpecialCharacter ( 2 ) // ... {2}
        .Total ( 8,-1 )
        .Compose ( );

/// <summary>
/// Generator for regular expression, validating password requirements.
/// </summary>
public class PasswordRegexGenerator
{
    private string _elementTemplate = "(?=(?:.*?({type})){({count})})";

    private Dictionary<string, string> _elements = new Dictionary<string, string> {
        { "uppercase", "[A-Z]" },
        { "lowercase", "[a-z]" },
        { "number", @"\d" },
        { "special", @"\W" },
        { "alphanumeric", @"\w" }
    };

    private StringBuilder _sb = new StringBuilder ( );

    private string Construct ( string what, int min, int max )
    {
        StringBuilder sb = new StringBuilder ( _elementTemplate );
        string count = min.ToString ( );

        if ( max == -1 )
        {
            count += ",";
        }
        else if ( max > 0 )
        {
            count += "," + max.ToString();
        }

        return sb
            .Replace ( "({type})", what )
            .Replace ( "({count})", count )
            .ToString ( );
    }

    /// <summary>
    /// Change the template for the generation of the regex parts
    /// </summary>
    /// <param name="newTemplate">the new template</param>
    /// <returns></returns>
    public PasswordRegexGenerator ChangeRegexTemplate ( string newTemplate )
    {
        _elementTemplate = newTemplate;
        return this;
       }

    /// <summary>
    /// Change or update the regex for a certain type ( number, uppercase ... )
    /// </summary>
    /// <param name="name">type of the regex</param>
    /// <param name="regex">new value for the regex</param>
    /// <returns></returns>
    public PasswordRegexGenerator ChangeRegexElements ( string name, string regex )
    {
        if ( _elements.ContainsKey ( name ) )
        {
            _elements[ name ] = regex;
        }
        else
        {
            _elements.Add ( name, regex );
        }
        return this;
    }

    #region construction methods 

    /// <summary>
    /// Adding number requirement
    /// </summary>
    /// <param name="min"></param>
    /// <param name="max"></param>
    /// <returns></returns>
    public PasswordRegexGenerator Number ( int min = 1, int max = 0 )
    {
        _sb.Append ( Construct ( _elements[ "number" ], min, max ) );
        return this;
    }

    public PasswordRegexGenerator UpperCase ( int min = 1, int max = 0 )
    {
        _sb.Append ( Construct ( _elements[ "uppercase" ], min, max ) );
        return this;
    }

    public PasswordRegexGenerator LowerCase ( int min = 1, int max = 0 )
    {
        _sb.Append ( Construct ( _elements[ "lowercase" ], min, max ) );
        return this;
    }

    public PasswordRegexGenerator SpecialCharacter ( int min = 1, int max = 0 )
    {
        _sb.Append ( Construct ( _elements[ "special" ], min, max ) );
        return this;
    }

    public PasswordRegexGenerator Total ( int min, int max = 0 )
    {
        string count = min.ToString ( ) + ( ( max == 0 ) ? "" : "," + max.ToString ( ) );
        _sb.Append ( ".{" + count + "}" );
        return this;
    }

    #endregion

    public string Compose ()
    {
        return "(" + _sb.ToString ( ) + ")";
    }
}

0

আপনি বৈধতার জন্য বর্গের নীচে ব্যবহার করতে পারেন:

public class PasswordValidator{

  private Pattern pattern;
  private Matcher matcher;

  private static final String PASSWORD_PATTERN =
          "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";

  public PasswordValidator(){
      pattern = Pattern.compile(PASSWORD_PATTERN);
  }

  /**
   * Validate password with regular expression
   * @param password password for validation
   * @return true valid password, false invalid password
   */
  public boolean validate(final String password){

      matcher = pattern.matcher(password);
      return matcher.matches();

  }
}

যেখানে 6 এবং 20 পাসওয়ার্ডের জন্য সর্বনিম্ন এবং সর্বাধিক দৈর্ঘ্য 20


0
  • প্রথমে পুরো পাসওয়ার্ডের সাথে মেলে একটি ননব্যাক্ট্র্যাকিং এক্সপ্রেশন ব্যবহার করুন, যদি এতে কমপক্ষে 8 টি অক্ষর থাকে (তবে এভাবে দীর্ঘ সময়ের জন্য কোনও সংযুক্তি বিস্ফোরণ নেই, তবে অবৈধ পাসওয়ার্ডগুলি): (?>{8,})
  • সমস্ত প্রয়োজনীয় অক্ষরের উপস্থিতি (এবং শর্তসমূহ) পরীক্ষা করার জন্য দৃশ্যের পিছনে যুক্ত অবস্থানগুলি ব্যবহার করুন। (?<=...)
  • কমপক্ষে একটি বড় হাতের অক্ষর: (?<=\p{Lu}.*)
  • কমপক্ষে একটি বিশেষ চরিত্র (কিছুটা অস্পষ্ট, তবে আসুন নো-শব্দ ব্যবহার করুন): (?<=\W.*)
  • কমপক্ষে একটি বর্ণমালা অক্ষর (: (?<=\w.*)

সংকলিত:

(?>.{8,})(?<=\p{Lu}.*)(?<=\W.*)(?<=\w.*)


0

বেস্ট সবকিছুর জন্য রেজেক্স ব্যবহার করছে না। এই প্রয়োজনীয়তা খুব হালকা। সিপিইউ-ভিত্তিক স্ট্রিং ক্রিয়াকলাপগুলিতে মানদণ্ড / বৈধতা যাচাইয়ের জন্য রেগেক্সের তুলনায় অনেক সস্তা এবং দ্রুত!


-2
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/

15
আমি আপনাকে আপনার প্রশ্ন সম্পাদনা করার এবং কিছু ব্যাখ্যা অন্তর্ভুক্ত করার পরামর্শ দিচ্ছি। কোড-কেবলমাত্র উত্তরগুলি কখনও কখনও যথেষ্ট ভাল তবে কোড + ব্যাখ্যা উত্তরগুলি সর্বদা ভাল
বারানকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.