জাভাস্ক্রিপ্টে বর্ণমালা চেক করার সর্বোত্তম উপায় way


107

কোনও INPUTক্ষেত্রের মধ্যে বর্ণমালা পরীক্ষা করার সর্বোত্তম উপায় কী JSP? আমি আমার বর্তমান কোডটি সংযুক্ত করেছি

<script type="text/javascript">
  function validateCode(){
      var TCode = document.getElementById('TCode').value;
      for(var i=0; i<TCode.length; i++)
      {
        var char1 = TCode.charAt(i);
        var cc = char1.charCodeAt(0);

        if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
        {

        }
         else {
         alert('Input is not alphanumeric');
         return false;
         }
      }
     return true;     
   }


2
আপনি কীভাবে "সেরা" সংজ্ঞা দেন তা নির্ভর করে। নীচের উত্তরগুলির বেশিরভাগই রেগেক্সের পরামর্শ দেয় যা আপনার আসল কোডের চেয়ে ধীর গতি সম্পন্ন করে । আমি আপনার কোডটি কিছুটা সাফ করেছি , যা আসলে খুব ভাল সম্পাদন করে।
মাইকেল মার্টিন-স্মাকার

উত্তর:


100

আপনি এই রেজেক্স ব্যবহার করতে পারেন /^[a-z0-9]+$/i


4
অবশ্যই এটি ধরে নিয়েছে যে খালি স্ট্রিং ( "") মেলানো উচিত নয়।
zzzzBov

15
ñপুরোপুরি বৈধ ইউটিএফ -8 চর যদিও প্যাটার্নে পড়ে না।
ওয়বিক

8
/ ^ [a-z0-9] + $ / i.est (টিকোড)
অ্যালেক্স ভি

3
একটি নিয়মিত অভিব্যক্তি পরীক্ষা করা মনে হয় এর চেয়ে অনেক ধীর (Chrome in 36% এ) charCodeAt()। দেখুন jsPerf এবং নিচে আমার উত্তর
মাইকেল মার্টিন-স্মাকার

5
"" X "," ź "," ć "ইত্যাদির মতো কিছু ভাষায় ব্যবহৃত বিশেষ অক্ষরগুলির সাথে এই রেজেক্স কাজ করে না
রাফাক স্বাচা

79

ব্যবহারকারীর আসল প্রবণতাটি str.charCodeAt(i)নিয়মিত প্রকাশের বিকল্পের চেয়ে দ্রুত বলে মনে হয়। ইন jsPerf আমার পরীক্ষা ক্রোম 36 (এবং সামান্য ফায়ারফক্স 31 ধীর) এ RegExp বিকল্প সঞ্চালিত 66% ধীর।

এখানে মূল বৈধকরণ কোডটির একটি সাফ সংস্করণ রয়েছে যা একটি স্ট্রিং গ্রহণ করে এবং ফেরত দেয় trueবা false:

function isAlphaNumeric(str) {
  var code, i, len;

  for (i = 0, len = str.length; i < len; i++) {
    code = str.charCodeAt(i);
    if (!(code > 47 && code < 58) && // numeric (0-9)
        !(code > 64 && code < 91) && // upper alpha (A-Z)
        !(code > 96 && code < 123)) { // lower alpha (a-z)
      return false;
    }
  }
  return true;
};

অবশ্যই পাঠ্যযোগ্যতার মতো অন্যান্য বিবেচনা থাকতে পারে। একটি এক-লাইন নিয়মিত অভিব্যক্তি অবশ্যই দেখার তাত্পর্যপূর্ণ। তবে আপনি যদি গতির সাথে কঠোরভাবে উদ্বিগ্ন হন তবে আপনি এই বিকল্পটি বিবেচনা করতে পারেন।


17
প্রোগ্রামাররা কোড চেহারা পছন্দ, কিন্তু আপনি এর অভ্যন্তর সৌন্দর্য দেখতে।
জিগি

আকর্ষণীয় বিকল্প পদ্ধতির - এমনকি আমার মনও অতিক্রম করেনি। আমি কেবল রেইগেক্স মনে রেখে এখানে এসেছি!
ozzy432836

যে উত্তরটি আপনাকে ভাবতে বাধ্য করে এবং এটি আপনাকে "প্রোগ্রামিং" এর অর্থ কী তা বোঝায়। আমি আমার উত্তরে
অস্কার জারুস

41

এটি একটি রেজেক্স দিয়ে পরীক্ষা করুন।

জাভাস্ক্রিপ্ট রেজেক্সেনের পসিক্স অক্ষর শ্রেণি নেই, সুতরাং আপনাকে নিজেই অক্ষরের ব্যাপ্তি লিখতে হবে:

if (!input_string.match(/^[0-9a-z]+$/))
  show_error_or_something()

এখানে ^স্ট্রিংয়ের শুরু অর্থ $মানে স্ট্রিংয়ের শেষ প্রান্ত, এবং [0-9a-z]+মানে এক বা থেকে চরিত্রের আরও 0কাছে 9বা থেকে aথেকে z

জাভাস্ক্রিপ্ট রিজেসেন সম্পর্কিত আরও তথ্য এখানে: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


14
ব্যবহারকারীকে "ম্যাজিক স্ট্রিং" না দিয়ে মৌলিক রেজেক্স ব্যাখ্যা এবং গাইডের সাথে লিঙ্ক করার জন্য +1।
চার্লস বার্নস

4
@ বা আপনি কেস সংবেদনশীলতা নির্দিষ্ট করতে রেগেক্সের শেষে কেবল 'আমি' যুক্ত করতে পারেন, .ie /^[a-z0-9]+$/iএবং এটি নিম্ন এবং উপরের উভয় অক্ষরকে কভার করবে
এলজেএইচ

33

আপনার একবারে এটি করার দরকার নেই। আলফা-সংখ্যাসূচক নয় এমনগুলির জন্য কেবল একটি পরীক্ষা করুন do যদি একটি পাওয়া যায় তবে বৈধতা ব্যর্থ হয়।

function validateCode(){
    var TCode = document.getElementById('TCode').value;
    if( /[^a-zA-Z0-9]/.test( TCode ) ) {
       alert('Input is not alphanumeric');
       return false;
    }
    return true;     
 }

যদি কোনও অ-আলফা সংখ্যার কমপক্ষে একটি মিল থাকে তবে তা হবে return false


6

আমি একটি স্ট্রিং প্রোটোটাইপ পদ্ধতি তৈরি করব:

String.prototype.isAlphaNumeric = function() {
  var regExp = /^[A-Za-z0-9]+$/;
  return (this.match(regExp));
};

তারপরে, ব্যবহারটি হবে:

var TCode = document.getElementById('TCode').value;
return TCode.isAlphaNumeric()


2
ডিজেড্যাভিড ৯৮: আমি মনে করি না যে "আপনার নিজের মালিকানাযুক্ত জিনিসগুলিকে সংশোধন করবেন না" বিধিটি এখানে প্রয়োগ হয়েছে। জাস্টিন কেবল স্ট্রিংয়ের সক্ষমতা বাড়িয়ে দিচ্ছিলেন, বিদ্যমান কার্যকারিতা পরিবর্তন করে না। দৃষ্টিকোণের জন্য, সি # বিশ্বে এটিকে একটি এক্সটেনশন পদ্ধতির যথাযথ বৈধ ব্যবহার হিসাবে বিবেচনা করা হবে। এমনকি যদি কোনও দিন "স্ট্রিং.আইএসএল্ফা নিউমারিক (): বুলিয়ান" ব্রাউজার নির্মাতারা প্রয়োগ করেন তবে স্বাক্ষর বা পদক্ষেপের কোনওটিই বাস্তবে পরিবর্তিত হবে না, তাই আমি এই বিশেষ উদাহরণে রক্ষণাবেক্ষণের কোনও হ্রাস দেখতে পাচ্ছি না। কিছু যে একটি নিয়ম তা বোঝায় না যে ব্যতিক্রম আছে।
রিস্তো ভ্যালিমিকি

5
    // On keypress event call the following method
    function AlphaNumCheck(e) {
        var charCode = (e.which) ? e.which : e.keyCode;
        if (charCode == 8) return true;

        var keynum;
        var keychar;
        var charcheck = /[a-zA-Z0-9]/;
        if (window.event) // IE
        {
            keynum = e.keyCode;
        }
        else {
            if (e.which) // Netscape/Firefox/Opera
            {
                keynum = e.which;
            }
            else return true;
        }

        keychar = String.fromCharCode(keynum);
        return charcheck.test(keychar);
    }

আরও, এই নিবন্ধটি জাভাস্ক্রিপ্টের বর্ণমালা বৈধতা বুঝতে সহায়তা করে।


3

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

আসল বর্ণানুক্রমিক স্ট্রিংটি "0a0a0a0b0c0d"পছন্দ "000000"বা পছন্দ নয় "qwertyuio"

আমি এখানে যে সমস্ত উত্তর পড়েছি তা trueউভয় ক্ষেত্রেই ফিরে এসেছিল । এবং আমাকে ক্ষমা করুন, আইএমএইচও, এটি সঠিক নয়

আমার "00000"স্ট্রিংটি আলফানাম কিনা তা যদি আমি খতিয়ে দেখতে চাই তবে আমার "মানবিক" উত্তরটি সন্দেহাতীতভাবে মিথ্যা।

কেন? সহজ। আমি কোনও চিঠির চর খুঁজে পাচ্ছি না। সুতরাং, একটি সাধারণ সংখ্যাযুক্ত স্ট্রিং [0-9]

অন্যদিকে, আমি যদি আমার "abcdefg"স্ট্রিং পরীক্ষা করতে চাই, তবে আমার "মানবিক" উত্তরটিও মিথ্যা। আমি সংখ্যাগুলি দেখতে পাচ্ছি না, সুতরাং এটি অক্ষর নয় meric শুধু আলফা [a-zA-Z]

মাইকেল মার্টিন-Smucker এর উত্তর আলোকজ্জ্বল হয়েছে।

তবে তিনি রেগেক্সের পরিবর্তে আরও ভাল পারফরম্যান্স অর্জনের লক্ষ্য নিয়েছিলেন। এটি সত্য, নিম্ন স্তরের উপায় ব্যবহার করে আরও ভাল পারফরম্যান্স পাওয়া যায়। কিন্তু ফলাফল এটি একই। স্ট্রিংগুলি "0123456789"(কেবলমাত্র সংখ্যাসূচক), "qwertyuiop"(কেবলমাত্র আলফা) এবং "0a1b2c3d4f4g"(বর্ণানুক্রমিক) TRUEঅক্ষর হিসাবে ফিরে আসে । একই রেজেক্স /^[a-z0-9]+$/iউপায়। রেজেক্স কাজ না করার কারণটি যেমন স্পষ্ট তত সহজ। সিনট্যাক্স []ইঙ্গিত বা না এবং । সুতরাং, যদি এটি কেবল সংখ্যাসূচক হয় বা যদি এটি কেবলমাত্র অক্ষর হয় তবে রেজেক্স ফিরে আসে true

তবে, মাইকেল মার্টিন-স্মাকার এর উত্তর তবুও আলোকিত ছিল। আমার জন্য. এটি আমাকে "নিম্ন স্তরে" ভাবতে, এমন একটি আসল ফাংশন তৈরি করতে দেয় যা দ্ব্যর্থহীনভাবে একটি বর্ণানুক্রমিক স্ট্রিং প্রক্রিয়া করে। আমি এটিকে পিএইচপি সম্পর্কিত সম্পর্কিত ফাংশনের মতো বলেছি ctype_alnum( 2020-02-18 সম্পাদনা করুন: যেখানে, তবে এই চেকগুলি OR এবং না )।

কোডটি এখানে:

function ctype_alnum(str) {
  var code, i, len;
    var isNumeric = false, isAlpha = false; //I assume that it is all non-alphanumeric



  for (i = 0, len = str.length; i < len; i++) {
    code = str.charCodeAt(i);


        switch (true){
            case code > 47 && code < 58: // check if 0-9
                isNumeric = true;
                break;
            case (code > 64 && code < 91) || (code > 96 && code < 123): //check if A-Z or a-z
                isAlpha = true;
                break;
            default: // not 0-9, not A-Z or a-z
                return false; //stop function with false result, no more checks

        }

  }

  return isNumeric && isAlpha; //return the loop results, if both are true, the string is certainly alphanumeric
};

... এবং এখানে ডেমো আছে

আমি এই আলোচনায় এসেছি কারণ আমি পিএইচপি ফাংশনের জাভাস্ক্রিপ্টের বিকল্প খুঁজছিলাম। আমি "প্রস্তুত-তে যেতে" উত্তরটি খুঁজে পাইনি, তবে প্রায়শই স্ট্যাকওভারফ্লোতে ঘটে যায়, জ্ঞানের ধারণা এবং একে অপরের সাথে তুলনা করা একটি দুর্দান্ত কিছু, যা আপনাকে কারওর উত্তর সম্পর্কে ভাবতে এবং আপনি যে সমাধানটি পেয়েছিলেন তা একসাথে খুঁজে বের করতে পরিচালিত করে সন্ধান করছি, কিন্তু আপনি ভেবেছিলেন না যে আপনি এটি জানেন।

এবং শেয়ার করুন!

সেরা

অস্কার


উপরেরটি আলফাআন্ডমেরিককে সমাধান করে, আলফা সংখ্যাসূচক নয়। return isNumeric || isAlpha;alphaNumeric হয়। উপরের কিছুটি সহায়ক হতে পারে।
তমুসজেরোয়াস

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

3

একটি শক্ত লুপে, সম্ভবত রেজেক্স এড়ানো এবং আপনার অক্ষরগুলিকে হার্ডকোড করা ভাল:

const CHARS = new Set("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
function isAlphanumeric(char) {
    return CHARS.has(char);
}

আপনি কি এটি ব্যাখ্যা করতে পারেন
অলসতা

2
একটি লুপে পুরো স্ট্রিংটি স্ক্যান করার সময় এই কোডটি ও (এন ^ 2) হয় এবং এর ফলে উপস্থাপিত সবচেয়ে খারাপ রেজেক্স সমাধানগুলির তুলনায় আরও খারাপ পারফরম্যান্স হবে (উদাহরণস্বরূপ একজন ব্যবহারকারী সমস্ত 'জেড'-এ পাস করে, সূচিপত্রকে) স্ক্যান করতে হবে প্রতিটি চরিত্রের জন্য শেষ)। এটি কেবল সম্ভাব্যভাবে পুরো 0-জেড স্ট্রিংটি স্ক্যান করার ওভারহেড ব্যয় করে না (পারফরম্যান্সে, প্রতি কল অনুসারে 18 টি চরিত্রের তুলনা) তবে উত্সের স্ট্রিংয়ের প্রতিটি চরিত্রের ওভারহেডের জন্য দুটি ফাংশন কলও রয়েছে - একটি বরং উল্লেখযোগ্য ধ্রুবক সময় মান! কোডটি কোনও ডোস দুর্বলতার পরিচয় দিতে পারে যেখানে এটি ব্যবহৃত হয় তার উপর নির্ভর করে।
কিউবিকসফট

1
আপনি একেবারে ঠিক CubicleSoft। আমি জেএস সেট ব্যবহার করার উত্তর আপডেট করেছি।
মালগানিস

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