কীভাবে সংবেদনশীল স্ট্রিং তুলনা করবেন?


1056

আমি কীভাবে জাভাস্ক্রিপ্টের ক্ষেত্রে সংবেদনশীল স্ট্রিং তুলনা করব?


25
সদ্য যুক্ত হওয়া .localeCompare()জাভাস্ক্রিপ্ট পদ্ধতিটি দেখুন। রাইটিংয়ের সময় শুধুমাত্র আধুনিক ব্রাউজারগুলি দ্বারা সমর্থিত (আইই 11 +)। বিকাশকারী.মোজিলা.অর্গ.ইন-
অ্যাড্রিয়েন


5
@ অ্যাড্রিনবি ক্রোম 48 কনসোলে "A".localeCompare( "a" );ফিরে আসে 1
manuell

3
@ মানুয়েল যার অর্থ বাছাইয়ের "a"আগে আসে "A"। মত "a"আসে আগে "b"। যদি এই আচরণটি না চাওয়া হয়, তবে .toLowerCase()প্রতিটি অক্ষর / স্ট্রিংয়ের মধ্যে একজন চাইবে । অর্থাত। বিকাশকারী.মোজিলা.আর.ইন.ইন"A".toLowerCase().localeCompare( "a".toLowerCase() )
ডকস / ওয়েব /

2
কারণ তুলনা প্রায়শই এমন একটি শব্দ যা আমি মনে করি স্ট্রিং বাছাই / সাজানোর জন্য ব্যবহৃত হয়। আমি এখন অনেক দিন আগে এখানে মন্তব্য। ===সাম্যতার জন্য পরীক্ষা করবে তবে স্ট্রিং বাছাই / অর্ডার করার জন্য যথেষ্ট ভাল হবে না (সিএফ। আমি যে প্রশ্নটি মূলত লিঙ্ক করেছি)।
অ্যাড্রিন

উত্তর:


1161

এটি করার সহজ উপায় (আপনি যদি বিশেষ ইউনিকোডের অক্ষর সম্পর্কে উদ্বিগ্ন না হন) হ'ল toUpperCase:

var areEqual = string1.toUpperCase() === string2.toUpperCase();

44
আপার বা লোয়ার কেসে রূপান্তর সমস্ত ভাষায় সঠিক ক্ষেত্রে সংবেদনশীল তুলনা সরবরাহ করে। i18nguy.com/unicode/turishes-i18n.html
স্যামুয়েল নেফ

57
@ স্যাম: আমি জানি। এজন্যই আমি লিখেছি if you're not worried about special Unicode characters
স্ল্যাक्स

141
toUpperCaseবেশি পছন্দ করার কোনও কারণ আছে toLowerCase?
jpmc26


19
এটি কি সত্যিই সেরা জেএস অফার করে?
কুগেল

210

সম্পাদনা : এই উত্তরটি মূলত 9 বছর আগে যুক্ত হয়েছিল। আজ আপনার localeCompareএই sensitivity: 'accent'বিকল্পটি ব্যবহার করা উচিত :

function ciEquals(a, b) {
    return typeof a === 'string' && typeof b === 'string'
        ? a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0
        : a === b;
}

console.log("'a' = 'a'?", ciEquals('a', 'a'));
console.log("'AaA' = 'aAa'?", ciEquals('AaA', 'aAa'));
console.log("'a' = 'á'?", ciEquals('a', 'á'));
console.log("'a' = 'b'?", ciEquals('a', 'b'));

উপরের উপরে পৃথক উচ্চারণ (তৃতীয় উদাহরণ হিসাবে) না থাকলে একই বেস চিঠির দুটি রূপকে একই হিসাবে বিবেচনা করতে { sensitivity: 'accent' }বলে ThelocaleCompare()

বিকল্পভাবে, আপনি ব্যবহার করতে পারেন { sensitivity: 'base' }, যা দুটি চরিত্রের সমান হিসাবে বিবেচনা করে যতক্ষণ না তাদের বেস অক্ষর একই থাকে (তাই Aসমান হিসাবে বিবেচিত হবে á)।

মনে রাখবেন যে তৃতীয় প্যারামিটার localeCompareIE10 বা নিম্ন বা নির্দিষ্ট মোবাইল ব্রাউজারগুলিতে সমর্থিত নয় (উপরের লিঙ্কে থাকা পৃষ্ঠায় সামঞ্জস্যতার চার্টটি দেখুন), সুতরাং যদি আপনাকে এই ব্রাউজারগুলি সমর্থন করতে হয় তবে আপনার এক প্রকার ফ্যালব্যাকের প্রয়োজন হবে:

function ciEqualsInner(a, b) {
    return a.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0;
}

function ciEquals(a, b) {
    if (typeof a !== 'string' || typeof b !== 'string') {
        return a === b;
    }

    //      v--- feature detection
    return ciEqualsInner('A', 'a')
        ? ciEqualsInner(a, b)
        : /*  fallback approach here  */;
}

আসল উত্তর

জাভাস্ক্রিপ্টে কেস সংবেদনশীল তুলনা করার সর্বোত্তম উপায় হ'ল পতাকা match()সহ RegExp পদ্ধতি ব্যবহার করা i

কেস-সংবেদনশীল অনুসন্ধান

যখন উভয় স্ট্রিং তুলনা করা হচ্ছে ভেরিয়েবল (ধ্রুবক নয়), তখন এটি আরও জটিল 'কারণ আপনি স্ট্রিং থেকে একটি রেজিএক্সপেক্ট তৈরি করতে হবে তবে স্ট্রিংটির বিশেষ রেজেক্স থাকলে স্ট্রিংটি রেজিএক্সপেক্টর কনস্ট্রাক্টরে পাস করার ফলে ভুল মিল বা ব্যর্থ ম্যাচের ফলাফল হতে পারে if এটি অক্ষর।

যদি আপনি আন্তর্জাতিকীকরণের বিষয়ে চিন্তা করেন তবে এটি ব্যবহার করবেন না toLowerCase()বা toUpperCase()এটি সমস্ত ভাষায় সঠিক ক্ষেত্রে সংবেদনশীল তুলনা সরবরাহ করে না।

http://www.i18nguy.com/unicode/turkish-i18n.html


5
@ গুপ্তচর, হ্যাঁ, আমি যা বলেছিলাম তা হ্যান্ডেল করতে হয়েছিল - "আপনার স্ট্রিং থেকে একটি রেজিএক্সপেক্ট তৈরি করতে হবে তবে স্ট্রিংটিতে বিশেষ রেজেক্স অক্ষর থাকলে স্ট্রিংটিকে রেজিএক্সপ্যাক কনস্ট্রাক্টরে পাস করা ভুল ম্যাচ বা ব্যর্থ ম্যাচের ফলস্বরূপ হতে পারে"।
স্যামুয়েল নেফ

21
কেস-সংবেদনশীল স্ট্রিং তুলনার জন্য এটি ব্যবহার করা সবচেয়ে ব্যয়বহুল সমাধান। একটি রেজিএক্সপেক্স জটিল প্যাটার্ন মেলানোর জন্য বোঝানো হয়, যেমন প্রতিটি প্যাটার্নের জন্য সিদ্ধান্ত গাছ তৈরি করা দরকার, তারপরে ইনপুট স্ট্রিংগুলির বিরুদ্ধে এটি কার্যকর করে। এটি কাজ করার সময়, এটি পরবর্তী ব্লকে কেনাকাটা করতে জেট বিমান নিয়ে যাওয়ার সাথে তুলনাযোগ্য ara tl; dr: দয়া করে এটি করবেন না।
অ্যাগস্টন হরভথ

2
আমি লোকালকম্পার () ব্যবহার করতে পারি, তবে এটির জন্য -1 এর জন্য 'a'.localeCompare('A')এবং অপটির মতো আমি কেস ইনসেসিটিভ স্ট্রিং তুলনা খুঁজছি।
স্টিংজি জ্যাক

3
@ স্টেটিং জ্যাক লোকালকম্পের ব্যবহার করে কেস-সংবেদনশীল তুলনা করতে আপনার 'a'.localeCompare (' এ ', অপরিজ্ঞাত, {সংবেদনশীলতা:' বেস '}) করা উচিত
যিহূদা গ্যাব্রিয়েল হিমাঙ্গো

1
নোট:localeCompare সংস্করণ যা জাভাস্ক্রিপ্ট ইঞ্জিন সমর্থন প্রয়োজন ECMAScript® আন্তর্জাতিকীকরণ এপিআই , যা এটি করা হয় না তা করার প্রয়োজন। সুতরাং এটির উপর নির্ভর করার আগে আপনি যাচাই করতে পারেন আপনি যে পরিবেশটি ব্যবহার করছেন তাতে এটি কাজ করে। উদাহরণস্বরূপ: const compareInsensitive = "x".localeCompare("X", undefined, {sensitivity: "base"}) === 0 ? (a, b) => a.localeCompare(b, undefined, {sensitivity: "base"}) : (a, b) => a.toLowerCase().localeCompare(b.toLowerCase());বা এই জাতীয় কিছু।
টিজে ক্রাউডার

46

সাম্প্রতিক মন্তব্যগুলিতে যেমন বলা হয়েছে, string::localeCompareক্ষেত্রে সংবেদনশীল তুলনা সমর্থন করে (অন্যান্য শক্তিশালী জিনিসের মধ্যে)।

এখানে একটি সহজ উদাহরণ

'xyz'.localeCompare('XyZ', undefined, { sensitivity: 'base' }); // returns 0

এবং একটি জেনেরিক ফাংশন আপনি ব্যবহার করতে পারেন

function equalsIgnoringCase(text, other) {
    return text.localeCompare(other, undefined, { sensitivity: 'base' }) === 0;
}

মনে রাখবেন যে আপনার পরিবর্তে undefinedসম্ভবত আপনি যে নির্দিষ্ট লোকেলের সাথে কাজ করছেন তা প্রবেশ করা উচিত। এমডিএন ডক্সে বর্ণিত হিসাবে এটি গুরুত্বপূর্ণ

সুইডিশ ভাষায়, ä এবং একটি পৃথক বেস অক্ষর

সংবেদনশীলতা বিকল্প

সংবেদনশীলতা বিকল্পগুলি এমডিএন থেকে ট্যাবলেট করা

ব্রাউজার সমর্থন

পোস্ট করার সময় হিসাবে, অ্যান্ড্রয়েড এবং অপেরা মিনি জন্য ইউসি ব্রাউজার স্থানীয় এবং বিকল্প প্যারামিটার সমর্থন করে না । আপ টু ডেট তথ্যের জন্য দয়া করে https://caniuse.com/#search=localeCompare দেখুন


35

নিয়মিত প্রকাশের সাহায্যেও আমরা অর্জন করতে পারি।

(/keyword/i).test(source)

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

(/keyword/).test(source)

17
এর মতো একটি রেজেক্স ব্যবহার করে সাবস্ট্রিংয়ের সাথে মিলবে! আপনার উদাহরণস্বরূপ স্ট্রিংটি keyWORDইতিবাচক ম্যাচে ফলাফল অনাবৃত হবে will তবে স্ট্রিং this is a keyword yoবা এর keywordsফলে ইতিবাচক ম্যাচ হবে in এটি সম্পর্কে সচেতন হন :-)
এলমার

6
এটি প্রশ্নের উত্তর হিসাবে ইক্যুয়ালিটি চেক (মামলা সংবেদনশীল) এর উত্তর দেয় না ! কিন্তু, এটি একটি কন্টেন্ট চেক! এটি ব্যবহার করবেন না
এস.স্পার্পোশন

4
অবশ্যই, পুরো স্ট্রিংয়ের সাথে মেলে, রেজিএক্সপকে রূপান্তর করা যেতে পারে /^keyword$/.test(source)তবে 1) যদি keywordকোনও ধ্রুবক না হয়, আপনার প্রয়োজন হবে new RegExp('^' + x + '$').test(source)এবং 2) কেস-সংবেদনশীল স্ট্রিংয়ের সমতা হিসাবে সাধারণ কোনও কিছুর পরীক্ষা করার জন্য একটি রিজএক্সপ্রেস অবলম্বন করা is খুব দক্ষ নয়।
জেএইচএইচ

28

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

function compareStrings (string1, string2, ignoreCase, useLocale) {
    if (ignoreCase) {
        if (useLocale) {
            string1 = string1.toLocaleLowerCase();
            string2 = string2.toLocaleLowerCase();
        }
        else {
            string1 = string1.toLowerCase();
            string2 = string2.toLowerCase();
        }
    }

    return string1 === string2;
}

আপনি "!!" ব্যবহার করার কোনও কারণ আছে কি? যদি ক্লজটি মানগুলির সত্যতা মূল্যায়ন করতে দেয়, তার পরিবর্তে সুস্পষ্ট বুলিয়ান রূপান্তর সম্পাদন করতে পারে?
সেলোস

এটি প্রয়োজন হয় না। আমার ধারণা আমি আরও জটিল কোডটির আমার অন্যান্য সংস্করণ থেকে পেয়েছি। আমি উত্তর আপডেট করেছি।
শীতল শাহ

@ থেকোডাস্টার আপনার ফাংশনটিতে একটি বাগ রয়েছে। এটি স্ট্রিংগুলি সমান হওয়ার সত্ত্বেও এটি compareStrings("", "")দেবে false
সের্গেই

@ সের্গে করা trueআমার পক্ষে এটি ফিরেছে । সম্ভবত এটি আপনার ব্রাউজারের সাথে একটি বাগ আছে?
জেনা স্লোয়ান

14

আমি সম্প্রতি একটি মাইক্রো লাইব্রেরি তৈরি করেছি যা কেস-সংবেদনশীল স্ট্রিং সহায়কগুলি সরবরাহ করে: https://github.com/nickuraltsev/ignore- کیس । (এটি toUpperCaseঅভ্যন্তরীণভাবে ব্যবহার করে ))

var ignoreCase = require('ignore-case');

ignoreCase.equals('FOO', 'Foo'); // => true
ignoreCase.startsWith('foobar', 'FOO'); // => true
ignoreCase.endsWith('foobar', 'BaR'); // => true
ignoreCase.includes('AbCd', 'c'); // => true
ignoreCase.indexOf('AbCd', 'c'); // => 2

12

আপনি যদি অসমতার দিক সম্পর্কে উদ্বিগ্ন হন (সম্ভবত আপনি একটি তালিকা বাছাই করতে চান) আপনাকে বেশ কিছুটা কেস-রূপান্তর করতে হবে, এবং ইউনিকোডে বড় হাতের অক্ষরের চেয়ে লવરক্যাস সম্ভবত ব্যবহারের জন্য সেরা রূপান্তর।

function my_strcasecmp( a, b ) 
{
    if((a+'').toLowerCase() > (b+'').toLowerCase()) return 1  
    if((a+'').toLowerCase() < (b+'').toLowerCase()) return -1
    return 0
}

জাভাস্ক্রিপ্টে স্ট্রিং তুলনা করার জন্য লোকেল "সি" ব্যবহার করা মনে হচ্ছে ফলস্বরূপ ক্রমটি খারাপ হবে যদি স্ট্রিংগুলিতে ASCII অক্ষর ব্যতীত অন্য কিছু থাকে contain স্ট্রিংগুলির আরও বিস্তারিত পরিদর্শন না করেই এগুলি করার মতো অনেক কিছুই নেই।


7

ধরুন আমরা স্ট্রিং ভেরিয়েবলের স্ট্রিং ভেরিয়েবল needleসন্ধান করতে চাই haystack। তিনটি গোটাচা রয়েছে:

  1. আন্তর্জাতিকীকরণ অ্যাপ্লিকেশনগুলি এড়ানো উচিত string.toUpperCaseএবং string.toLowerCase। নিয়মিত অভিব্যক্তি ব্যবহার করুন যা পরিবর্তে কেসটিকে উপেক্ষা করে। উদাহরণস্বরূপ, var needleRegExp = new RegExp(needle, "i");দ্বারা অনুসরণ needleRegExp.test(haystack)
  2. সাধারণভাবে, আপনি এর মান জানেন না needle। সতর্ক থাকুন যাতে needleকোনও নিয়মিত অভিব্যক্তি বিশেষ অক্ষর না থাকে । এগুলি ব্যবহার করে পালাতে পারেন needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  3. অন্যান্য ক্ষেত্রে, আপনি যদি সঠিকভাবে মেলাতে চান needleএবং haystackকেবল কেস উপেক্ষা করে আপনার নিয়মিত অভিব্যক্তি নির্মাণকারীর "^"শুরুতে এবং "$"শেষে যুক্ত করা নিশ্চিত করুন ।

পয়েন্টগুলি (1) এবং (2) বিবেচনায় নিলে একটি উদাহরণ হবে:

var haystack = "A. BAIL. Of. Hay.";
var needle = "bail.";
var needleRegExp = new RegExp(needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i");
var result = needleRegExp.test(haystack);
if (result) {
    // Your code here
}

আপনি বাজি! আপনাকে যা করতে হবে প্রয়োজন প্রতিস্থাপন হয় new RegExp(...)নিম্নলিখিত সঙ্গে সঙ্গতিপূর্ণ 3 অংশ: new RegExp("^" + needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + "$", "i");। এটি নিশ্চিত করে তোলে যে আপনার অনুসন্ধানের স্ট্রিংয়ের আগে বা পরে আর কোনও অক্ষর নেই needle
ক্রিস চুটে

4

সংবেদনহীন তুলনার জন্য দুটি উপায় রয়েছে:

  1. স্ট্রিংগুলি উপরের ক্ষেত্রে রূপান্তর করুন এবং তারপরে কঠোর অপারেটর ( ===) ব্যবহার করে তাদের তুলনা করুন । অপারেটররা কীভাবে কঠোরভাবে অপারেটরদের স্টাফগুলি পড়বে তা এখানে আচরণ করে: http://www.thesstech.com/javascript/relational-logical-operators
  2. স্ট্রিং পদ্ধতি ব্যবহার করে প্যাটার্নের মিল:

সংবেদনশীল অনুসন্ধানের জন্য "অনুসন্ধান" স্ট্রিং পদ্ধতিটি ব্যবহার করুন। অনুসন্ধান এবং অন্যান্য স্ট্রিং পদ্ধতিগুলি সম্পর্কে এখানে পড়ুন: http://www.thesstech.com/pattern-matching-used-string-methods

<!doctype html>
  <html>
    <head>
      <script>

        // 1st way

        var a = "apple";
        var b = "APPLE";  
        if (a.toUpperCase() === b.toUpperCase()) {
          alert("equal");
        }

        //2nd way

        var a = " Null and void";
        document.write(a.search(/null/i)); 

      </script>
    </head>
</html>

4

এখানে প্রচুর উত্তর, তবে আমি স্ট্রিং লিবিব বাড়ানোর উপর ভিত্তি করে একটি সলিউশন যোগ করতে চাই:

String.prototype.equalIgnoreCase = function(str)
{
    return (str != null 
            && typeof str === 'string'
            && this.toUpperCase() === str.toUpperCase());
}

আপনি জাভাতে যেমন করেন ঠিক তেমন এটি ব্যবহার করতে পারেন!

উদাহরণ:

var a = "hello";
var b = "HeLLo";
var c = "world";

if (a.equalIgnoreCase(b)) {
    document.write("a == b");
}
if (a.equalIgnoreCase(c)) {
    document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
    document.write("b != c");
}

আউটপুট হবে:

"a == b"
"b != c"

String.prototype.equalIgnoreCase = function(str) {
  return (str != null &&
    typeof str === 'string' &&
    this.toUpperCase() === str.toUpperCase());
}


var a = "hello";
var b = "HeLLo";
var c = "world";

if (a.equalIgnoreCase(b)) {
  document.write("a == b");
  document.write("<br>");
}
if (a.equalIgnoreCase(c)) {
  document.write("a == c");
}
if (!b.equalIgnoreCase(c)) {
  document.write("b != c");
}


4

স্ট্রিং ম্যাচ বা তুলনার জন্য RegEx ব্যবহার করুন।

জাভাস্ক্রিপ্টে, আপনি match()স্ট্রিং তুলনার জন্য ব্যবহার করতে পারেন , রাখা ভুলবেন নাi RegEx এ ।

উদাহরণ:

var matchString = "Test";
if (matchString.match(/test/i)) {
  alert('String matched');
}
else {
 alert('String not matched');
}

1
অন্যথায়, আংশিক ম্যাচগুলি দিয়ে আপনি ঠিক আছেন তা নিশ্চিত করুন matchString.match(/^test$/i)
হ্যাকেল

লোয়ারকেস "টেস্ট" এর পরিবর্তে আপনার কী ভার x = 'পরীক্ষা' রয়েছে, matchString.match(/x/i)কাজ করবে? তা না হলে কী কাজ করবে?
রাজ্জান জামফির


3

যদি উভয় স্ট্রিং একই পরিচিত লোকেলের হয় তবে আপনি Intl.Collatorএটির মতো অবজেক্টটি ব্যবহার করতে চাইতে পারেন :

function equalIgnoreCase(s1: string, s2: string) {
    return new Intl.Collator("en-US", { sensitivity: "base" }).compare(s1, s2) === 0;
}

স্পষ্টতই, আপনি Collatorআরও ভাল দক্ষতার জন্য ক্যাশে করতে চাইতে পারেন ।

এই পদ্ধতির সুফল এটি অনেক দ্রুত RegExps ব্যবহার না করে হওয়া উচিত এবং একটি অত্যন্ত স্বনির্ধারিত উপর ভিত্তি করে করা হয় (বিবরণ দেখুন localesএবং optionsউপরে প্রবন্ধে কন্সট্রাকটর প্যারামিটার) প্রস্তুত-থেকে-ব্যবহার collators সেট।


সংবেদনশীলতার জন্য আরেকটি বিকল্প হ'ল accentএটি সংবেদনশীল ক্ষেত্রে রাখে, তবে আচরণ করে aএবং áপৃথক চরিত্র হিসাবে as সুতরাং baseবা accentউভয়ই সঠিক প্রয়োজনের উপর নির্ভর করে উপযুক্ত হতে পারে।
ম্যাথু ক্রামলে

2

আমি একটি এক্সটেনশন লিখেছি। খুব তুচ্ছ

if (typeof String.prototype.isEqual!= 'function') {
    String.prototype.isEqual = function (str){
        return this.toUpperCase()==str.toUpperCase();
     };
}

1
স্ট্রিং # ইক্যুয়াল একই সাথে অস্তিত্বের জন্য কীভাবে কাজ করা উচিত তার বিভিন্ন ধারণার সাথে দুটি কোডবেস কী ঘটে?
রায়ান কাভানহো

3
@ খানশার্প প্রচুর লোকেরা এটির মধ্যে নির্মিত প্রোটোটাইপটি পরিবর্তন করতে একটি বিরোধী-প্যাটার্ন হিসাবে বিবেচনা করে। এই কারণেই লোকেরা আপনার উত্তরটি ভোট দিতে পারে।
jt000

1
অজানা পদ্ধতির সংজ্ঞাটি পছন্দ করা কি অশুচি নয়? উদাহরণস্বরূপ, কিছু ব্রাউজার বাস্তবায়নের সিদ্ধান্ত নেওয়ার সাথে সাথে String#isEqualবা Object#isEqualআপনার সমস্ত পৃষ্ঠাগুলি পৃথকভাবে আচরণ করে এবং স্পেসিফিকেশনটি আপনার সাথে সঠিকভাবে মেলে না, তবে অদ্ভুত কাজ করতে পারে।
রবার্ট

2

এমনকি এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে। সংবেদনশীল কেসকে উপেক্ষা করার জন্য আমার রেজিএক্সপ ব্যবহার করতে এবং ম্যাচ করার জন্য আমার আলাদা পদ্ধতি রয়েছে। দয়া করে আমার লিঙ্কটি দেখুন https://jsfiddle.net/marchdave/7v8bd7dq/27/

$("#btnGuess").click(guessWord);

  function guessWord() {

   var letter = $("#guessLetter").val();
   var word = 'ABC';
   var pattern = RegExp(letter, 'gi'); // pattern: /a/gi

   var result = word.match(pattern);
   alert('Ignore case sensitive:' + result);

  }

1

কীভাবে ব্যতিক্রম ছোঁড়াবেন না এবং ধীরে ধীরে ব্যবহার করবেন না?

return str1 != null && str2 != null 
    && typeof str1 === 'string' && typeof str2 === 'string'
    && str1.toUpperCase() === str2.toUpperCase();

উপরের স্নিপেট ধরেছে যে কোনওটি স্ট্রিং নাল বা অপরিজ্ঞাত থাকলে আপনি মেলাতে চান না।

আপনি যদি নাল / অপরিজ্ঞাত সাথে মেলে করতে চান তবে:

return (str1 == null && str2 == null)
    || (str1 != null && str2 != null 
        && typeof str1 === 'string' && typeof str2 === 'string'
        && str1.toUpperCase() === str2.toUpperCase());

যদি কোনও কারণে আপনি অপরিবর্তিত বনাম নাল সম্পর্কে যত্নশীল হন:

return (str1 === undefined && str2 === undefined)
    || (str1 === null && str2 === null)
    || (str1 != null && str2 != null 
        && typeof str1 === 'string' && typeof str2 === 'string'
        && str1.toUpperCase() === str2.toUpperCase());

বা কেবলstr1 == str2 || ...
স্ল্যাक्स

1

যেহেতু কোনও উত্তরই স্পষ্টভাবে ব্যবহারের জন্য একটি সাধারণ কোড স্নিপেট সরবরাহ করে না RegExp, এখানে আমার চেষ্টা:

function compareInsensitive(str1, str2){ 
  return typeof str1 === 'string' && 
    typeof str2 === 'string' && 
    new RegExp("^" + str1.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "$", "i").test(str2);
}

এর বিভিন্ন সুবিধা রয়েছে:

  1. প্যারামিটারের ধরন যাচাই করে (যেমন কোনও স্ট্রিং প্যারামিটার undefinedযেমন উদাহরণস্বরূপ, একটি এক্সপ্রেশনকে ক্র্যাশ করবে str1.toUpperCase())।
  2. সম্ভাব্য আন্তর্জাতিকীকরণ সংক্রান্ত সমস্যায় ভুগছেন না।
  3. RegExpস্ট্রিং এড়িয়ে যায় ।

তবে রেজিএক্সপেক্সের পলায়নের অভাবে ভুগছেন।
কিওয়ারটি

@Qwertiy ন্যায্য বিন্দু, প্রতি পলায়নের যোগ stackoverflow.com/a/3561711/67824
ওহাদ স্নাইডার

0

এটি একটি হল উন্নত সংস্করণ এর এই উত্তর

String.equal = function (s1, s2, ignoreCase, useLocale) {
    if (s1 == null || s2 == null)
        return false;

    if (!ignoreCase) {
        if (s1.length !== s2.length)
            return false;

        return s1 === s2;
    }

    if (useLocale) {
        if (useLocale.length)
            return s1.toLocaleLowerCase(useLocale) === s2.toLocaleLowerCase(useLocale)
        else
            return s1.toLocaleLowerCase() === s2.toLocaleLowerCase()
    }
    else {
        if (s1.length !== s2.length)
            return false;

        return s1.toLowerCase() === s2.toLowerCase();
    }
}



ব্যবহার এবং পরীক্ষা:


0

উভয়কে নিম্নে রূপান্তর করুন (কেবলমাত্র পারফরম্যান্সের কারণে) এবং একক লাইনে টার্নারি অপারেটরের সাথে তাদের তুলনা করুন:

function strcasecmp(s1,s2){
    s1=(s1+'').toLowerCase();
    s2=(s2+'').toLowerCase();
    return s1>s2?1:(s1<s2?-1:0);
}

কে বলে সি মারা গেছে? : ডি
শেঠ

0

আপনি যদি জানেন যে আপনি asciiপাঠ্য নিয়ে কাজ করছেন তবে আপনি কেবল একটি বড় / ছোট হাতের অক্ষর অফসেট তুলনা ব্যবহার করতে পারেন।

কেবল আপনার "নিখুঁত" স্ট্রিং (যার সাথে আপনি ম্যাচ করতে চান) তার ছোট হাতের অক্ষরটি নিশ্চিত করুন:

const CHARS_IN_BETWEEN = 32;
const LAST_UPPERCASE_CHAR = 90; // Z
function strMatchesIgnoreCase(lowercaseMatch, value) {
    let i = 0, matches = lowercaseMatch.length === value.length;
    while (matches && i < lowercaseMatch.length) {
        const a = lowercaseMatch.charCodeAt(i);
        const A = a - CHARS_IN_BETWEEN;
        const b = value.charCodeAt(i);
        const B = b + ((b > LAST_UPPERCASE_CHAR) ? -CHARS_IN_BETWEEN : CHARS_IN_BETWEEN);
        matches = a === b // lowerA === b
            || A === b // upperA == b
            || a === B // lowerA == ~b
            || A === B; // upperA == ~b
        i++;
    }
    return matches;
}

0

আমি এই দ্রুত শর্টহ্যান্ড বৈচিত্রটি পছন্দ করি -

export const equalsIgnoreCase = (str1, str2) => {
    return (!str1 && !str2) || (str1 && str2 && str1.toUpperCase() == str2.toUpperCase())
}

প্রক্রিয়াকরণে দ্রুত এবং এটি যা করতে চায় তা করে।


0

এই javascript গ্রন্থাগারটি প্রচুর স্ট্রিং অপারেশন সরবরাহ করে। এটি ব্যবহার করা খুব সুবিধাজনক

কিভাবে ইনস্টল করতে হবে

npm install --save string

আমদানি

var S = require('string');

স্ট্রিং তুলনা উপেক্ষা করুন

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