প্রতীক ম্যাচ প্রতীক:! $% ^ & * () _ + | ~ - = `{} []:"; '<>?,। /


96

আমি জাভাস্ক্রিপ্টে একটি রেজেক্স পরীক্ষা তৈরি করার চেষ্টা করছি যা এই অক্ষরগুলির একটিতে স্ট্রিংটি পরীক্ষা করবে:

!$%^&*()_+|~-=`{}[]:";'<>?,./

আপনি আগ্রহী হলে আরও তথ্য :)

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

আমার কাছে একটি টেবিল রয়েছে যা পাসওয়ার্ডের প্রয়োজনীয়তাগুলি তালিকাভুক্ত করে এবং শেষ ব্যবহারকারীরা নতুন পাসওয়ার্ড টাইপ করার সাথে সাথে এটি রেগেক্সেসের একটি অ্যারের পরীক্ষা করে এবং এটি যদি সারণী সারিতে একটি চেকমার্ক রাখে ... এটি চেক আউট হয় :) আমাকে কেবল এটি যুক্ত করতে হবে validationঅ্যারে 4 র্থ আইটেমের জায়গায় ।

var validate = function(password){
    valid = true;

    var validation = [
        RegExp(/[a-z]/).test(password), RegExp(/[A-Z]/).test(password), RegExp(/\d/).test(password), 
        RegExp(/\W|_/).test(password), !RegExp(/\s/).test(password), !RegExp("12345678").test(password), 
        !RegExp($('#txtUsername').val()).test(password), !RegExp("cisco").test(password), 
        !RegExp(/([a-z]|[0-9])\1\1\1/).test(password), (password.length > 7)
    ]

    $.each(validation, function(i){
        if(this)
            $('.form table tr').eq(i+1).attr('class', 'check');
        else{
            $('.form table tr').eq(i+1).attr('class', '');
            valid = false
        }
    });

    return(valid);

}

হ্যাঁ, সার্ভার-সাইডের বৈধতা সম্পর্কিতও রয়েছে!


9
এটি বেশ মজার যে আপনার চরিত্রের উত্তরটি বিশেষ চরিত্রগুলি এড়িয়ে চলা এবং সামনের ফটকে losোকানো ব্যতীত শিরোনামে রয়েছে।
স্কিরিটাই

4
কেন ব্যবহার করবেন না .addClass("check")এবং .removeClass("check")? এবং if (someBoolean == true)কোডে দেখা সর্বদা আমাকে ক্রিঞ্জ করে। শুধু কর if (someBoolean)। বা, আরও ভাল, ঠিক এখন $(".form table tr").eq(i+1).toggleClass("check", !!this); valid = valid && !!this;
গিলি

কোড পর্যালোচনার জন্য +1 @ gill3 thx- সত্যই দুর্দান্ত প্রতিক্রিয়া। আমি এর আগে স্বল্প-হাতের পদ্ধতিগুলি ব্যবহার করেছি।
পিক্সেলবিবি

@ গিলি 3, এটি এফএফ এ দুর্দান্ত কাজ করছে বলে মনে হচ্ছে তবে! এই ছোট হাত ভালবাসা। আমি IE8 ভিন্নভাবে কী করছে তা জানার চেষ্টা করছি।
পিক্সেলবিবি

উত্তর:


174

এই জন্য নিয়মিত প্রকাশ সত্যিই সহজ। শুধু একটি অক্ষর ক্লাস ব্যবহার করুন। হাইফেন চরিত্রের শ্রেণিতে একটি বিশেষ চরিত্র, তাই এটি প্রথমে হওয়া দরকার:

/[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]/

আপনার অন্যান্য নিয়মিত এক্সপ্রেশন মেটাচার্যাক্টরগুলি এড়ানো দরকার।

সম্পাদনা: হাইফেনটি বিশেষ কারণ এটি বিভিন্ন অক্ষরের প্রতিনিধিত্ব করতে ব্যবহৃত হতে পারে। এই একই অক্ষর শ্রেণিটি এর রেঞ্জগুলির সাথে সরল করা যেতে পারে:

/[$-/:-?{-~!"^_`\[\]]/

তিনটি রেঞ্জ রয়েছে। '$' থেকে '/', ':' থেকে '?', এবং '{' থেকে '~'। অক্ষরের শেষ স্ট্রিংটি আরও সহজভাবে একটি ব্যাপ্তির সাথে উপস্থাপন করা যায় না: "" ^ _ `[]।

অক্ষর শ্রেণীর জন্য ব্যাপ্তি সন্ধান করতে একটি ACSII টেবিল ব্যবহার করুন ।


চরিত্রের ক্রম থেকে বেরিয়ে যাওয়ার জন্য কেন কোয়ান্টিফায়ার্স \ প্রশ্ন এবং \ ই উল্লেখ করা হয়নি?
সার্জ

এই সমাধানটি সন্ধান করার আগে আমি চরিত্রের শ্রেণি ছাড়ার পথে নেমে যাচ্ছিলাম: তবে আলফা, অঙ্কগুলি, সাদা স্থান ইত্যাদির সাথে সব মিলিয়ে দিন
পিট অ্যালভিন

4
হাইফেনগুলি প্রথমে আসতে হবে তা কি সাধারণ জ্ঞান? আমি কয়েক ডজন এসও উত্তর এবং রেজেক্স চিট শিটগুলি পড়েছি এটি এটিই আমি শুনেছি। আপনার উত্তর আমাকে অনেক নাটক রক্ষা করেছে। ধন্যবাদ!
সিএফ_হনিবেজার

4
@ সার্জি \Qএবং \Eজেএস রেজিপ এক্স ইঞ্জিনে কাজ করবেন না :(/^\Q.\E$/.test('Q+E'); // true
পল এস।

4
@ q4w56 ব্যাকস্ল্যাশ মূল প্রশ্নে বর্ণিত অক্ষরের সংখ্যায় নয়, সুতরাং ব্যাকস্ল্যাশের সাথে মিলে যাওয়া সঠিক নয়। :)
জেফ হিলম্যান

7

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

/[^\p{L}\d\s@#]/u

ব্যাখ্যা

[^...] নীচের তালিকায় উপস্থিত নেই এমন একটি একক অক্ষর মেলে

  • \p{L} => যে কোনও ভাষা থেকে যে কোনও বর্ণের সাথে মেলে

  • \d => নয়টি দিয়ে অঙ্কের শূন্যের সাথে মেলে

  • \s => যে কোনও ধরণের অদৃশ্য চরিত্রের সাথে মেলে

  • @# => @এবং #অক্ষর

u(ইউনিকোড) পতাকাটি পাস করতে ভুলবেন না ।


ইঙ্গিত না করার জন্য আপনার কি প্রয়োজন হবে না?
ওয়েববার

4
@ ওয়েবার নং তারা রাজধানীতে আছেন এবং এটি বিবৃতিটিকে নেতিবাচক করে তুলেছে। ^প্রয়োজন হয় যখন আমরা \wএবং \sছোট অক্ষরে ব্যবহার করি ।
আমিরজপ্রি

4
এটি কি এটিকে ব্যাখ্যা করে না যাতে বাইরের wবা বাইরের s, এবং যেহেতু এই দুটি সত্যিই একে একে ছেদ করে না কেবল সমস্ত চরিত্রের মধ্য দিয়ে দেয়? (এইভাবে কোনও ফিল্টারিং করা হচ্ছে না))
জেইল

4
@ জেইল আপনি ঠিক বলেছেন, নিয়মিত মত প্রকাশের /[\W\S]/মাধ্যমে বলা হয়েছে ( ) সব কিছু করার অনুমতি দেয়। আমি বিশ্বাস করি আমির যা পেয়েছিলেন তার আরও সঠিক উপস্থাপনা হবে [^\w\s]। পূর্বেরগুলিতে, নিয়মিত অভিব্যক্তিটি বলছে "আলফানিউমেরিক অর বা হোয়াইটস্পেস নয় এমন কোনও কিছুকে মিলিয়ে দাও ", যা আপনি উল্লেখ করেছেন যে সমস্ত বর্ণনামূলক অক্ষরগুলি সাদা স্থান এবং বিপরীত নয় since পরেরটি বলেছে যে "যে কোনও কিছু বর্ণানুক্রমিক নয় এবং এটি হোয়াইটস্পেস নয় match " অবশ্যই, উচ্চারণযুক্ত অক্ষরগুলিতে ব্যতিক্রমগুলি প্রয়োগ হয় (যেমন À) এর সাথে মিলে যায় [^\w\s]
জেসি

এর মধ্যে _ চর
মাইকশেম

5

উত্তর

/[\W\S_]/

ব্যাখ্যা

এটি একটি অক্ষর শ্রেণি তৈরি করে যা শব্দের অক্ষর, স্থানের অক্ষরগুলি মুছে ফেলা এবং আন্ডারস্কোর অক্ষরটি ফিরে যুক্ত করে (আন্ডারস্কোর হিসাবে এটি একটি "শব্দ" অক্ষর)। যা বাকি আছে তা হ'ল বিশেষ অক্ষর। বড় বড় অক্ষরগুলি তাদের ছোট হাতের অংশগুলির উপকারের প্রতিনিধিত্ব করে।

\Wসমস্ত "শব্দের" অক্ষরের সমতুল্য [^a-zA-Z0-9_]
\Sসমস্ত অ "হোয়াইটস্পেস" অক্ষর [ \t\n\r\f\v]
_নির্বাচন করবে যা "_" নির্বাচন করবে কারণ ব্যবহার করার সময় আমরা এটিকে প্রত্যাখ্যান করি \Wএবং এটিকে আবার যুক্ত করতে হবে


মাইকশেম, আপনি কেবল একটি টাইম মেশিনের মাধ্যমে আমাকে নিয়ে গিয়েছিলেন।
পিক্সেলবিবি

হ্যাঁ, আমি এটি লক্ষ্য করেছি বয়স্ক ছিল, তবে আমি অনুভব করেছি যে সহজ উত্তর পোস্ট করা হয়নি।
মাইকশেম

নীচের উত্তর থেকে এটি কীভাবে আলাদা যা আন্ডারস্কোরে ব্যর্থ হয়?
sf8193

-1
// The string must contain at least one special character, escaping reserved RegEx characters to avoid conflict
  const hasSpecial = password => {
    const specialReg = new RegExp(
      '^(?=.*[!@#$%^&*"\\[\\]\\{\\}<>/\\(\\)=\\\\\\-_´+`~\\:;,\\.€\\|])',
    );
    return specialReg.test(password);
  };

আপনি RegExpযখন কেবলমাত্র একটি রেজেক্স আক্ষরিক ব্যবহার করতে পারেন তখন কনস্ট্রাক্টর ব্যবহার করবেন না । অনেক কম পালানোর কাজ (যার বেশিরভাগই যাইহোক অপ্রয়োজনীয়), এবং এটি আরও কার্যকর।
বার্গি

আপনি যখন সরাসরি চরিত্রটির সাথে সরাসরি মিল করতে পারেন তখন কেন জটিল জটিল ব্যবহার করবেন?
বার্গি

আপনি কি একটি উদাহরণ দিতে পারেন বার্গি? আপনি কী পরামর্শ দিচ্ছেন তা আমি বুঝতে পারি না।
অর্ণি গুডজনসন

-1

এটি অর্জনের একটি সহজ উপায় হ'ল negativeণাত্মক সেট [^ \ w \ s]। এটি মূলত:

  • বর্ণচিহ্ন নয় এমন কিছু (অক্ষর এবং সংখ্যা)
  • কোনও জায়গা যা কোনও স্থান, ট্যাব বা লাইন ব্রেক নয় (সম্মিলিতভাবে হোয়াইটস্পেস হিসাবে উল্লেখ করা হয়)

কিছু কারণে [\ W \ S] একইভাবে কাজ করে না, এটি কোনও ফিল্টারিং করে না। উত্তরের একটিতে জায়েলের একটি মন্তব্য একটি ব্যাখ্যার কিছু সরবরাহ করে।


না, আন্ডারস্কোরটি অনুপস্থিত এবং এসসিআই পরিসরের বাইরে সমস্ত অক্ষর এবং আসকি রেঞ্জের বেশিরভাগ নিয়ন্ত্রণের অক্ষর এই শ্রেণীর সাথে মিলবে। /[^\w\s]/.test('é') # true, /[^\w\s]/.test('_') # false
ক্যাসিমির এবং

-7

'এ' এর যে কোনও ভাষা থেকে সমস্ত উত্তরসূত্রগুলি প্রতিস্থাপন করুন এবং আপনি উদাহরণস্বরূপ সমস্ত সংখ্যাকে 0 এ পরিণত করুন:

return str.replace(/[^\s!-@[-`{-~]/g, "A").replace(/\d/g, "0");

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