আমার নিম্নলিখিতগুলি রয়েছে:
if (referrer.indexOf("Ral") == -1) { ... }
আমি কি কি করতে পছন্দ করা হয় Ral
এটা হতে পারে, যাতে কেস অসংবেদী, RAl
, rAl
, ইত্যাদি এবং এখনও মেলেনি।
কী বলার উপায় আছে যে Ral
কেস-সংবেদনশীল হতে হবে?
আমার নিম্নলিখিতগুলি রয়েছে:
if (referrer.indexOf("Ral") == -1) { ... }
আমি কি কি করতে পছন্দ করা হয় Ral
এটা হতে পারে, যাতে কেস অসংবেদী, RAl
, rAl
, ইত্যাদি এবং এখনও মেলেনি।
কী বলার উপায় আছে যে Ral
কেস-সংবেদনশীল হতে হবে?
উত্তর:
.toLowerCase()
পরে যোগ করুন referrer
। এই পদ্ধতিটি স্ট্রিংকে লোয়ার কেস স্ট্রিংয়ে পরিণত করে। তারপরে, এর পরিবর্তে .indexOf()
ব্যবহার ral
করুন Ral
।
if (referrer.toLowerCase().indexOf("ral") === -1) {
নিয়মিত এক্সপ্রেশন ব্যবহার করে এটিও অর্জন করা যেতে পারে (বিশেষত কার্যকর যখন আপনি গতিশীল নিদর্শনগুলির বিরুদ্ধে পরীক্ষা করতে চান):
if (!/Ral/i.test(referrer)) {
// ^i = Ignore case flag for RegExp
.search
পদ্ধতিটি ব্যবহার করুন :var index = referrer.search(/Ral/i);
আর একটি বিকল্প নিম্নলিখিত পদ্ধতি হিসাবে অনুসন্ধান পদ্ধতি ব্যবহার করা হয়:
if (referrer.search(new RegExp("Ral", "i")) == -1) { ...
এটি আরও মার্জিত দেখায় তারপরে পুরো স্ট্রিংটি লোয়ার কেসে রূপান্তরিত করে এটি আরও কার্যকর হতে পারে।
কোডটির toLowerCase()
স্ট্রিংয়ের উপর দিয়ে দুটি পাস রয়েছে, একটি পাস এটিকে লোয়ার কেসে রূপান্তর করতে পুরো স্ট্রিংয়ে থাকে এবং অন্যটি পছন্দসই সূচকটি সন্ধান করে।
কোডটির সাথে RegExp
স্ট্রিংয়ের একটি পাস রয়েছে যা এটি পছন্দসই সূচকের সাথে মেলে।
অতএব, দীর্ঘ স্ট্রিংগুলিতে আমি RegExp
সংস্করণটি ব্যবহার করার পরামর্শ দিচ্ছি (আমার ধারণা যে সংক্ষিপ্ত স্ট্রিংগুলিতে এই RegExp
দক্ষতাটি যদিও বস্তু তৈরির অ্যাকাউন্টে আসে )
একটি রেজিপ্যাক্স ব্যবহার করুন:
if (!/ral/i.test(referrer)) {
...
}
অথবা, ব্যবহার করুন .toLowerCase()
:
if (referrer.toLowerCase().indexOf("ral") == -1)
ES2016 থেকে আপনি কিছুটা ভাল / সহজ / আরও মার্জিত পদ্ধতি (কেস-সংবেদনশীল) ব্যবহার করতে পারেন:
if (referrer.includes("Ral")) { ... }
বা (কেস-সংবেদনশীল):
if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }
এখানের কিছু তুলনা হয় .indexOf()
এবং .includes()
:
https://dev.to/adroitcoder/includes-vs-indexof-in-javascript
includes
হয় কেস সংবেদনশীল Chrome এর: চেষ্টা 'fooBar'.includes('bar')
==>false
এখানে বেশ কয়েকটি পন্থা রয়েছে।
আপনি যদি এই উদাহরণের জন্য কেস-সংবেদনশীল চেক করতে চান তবে নীচের মতো কিছু করুন।
if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
...
বিকল্পভাবে, আপনি যদি নিয়মিত এই চেকটি সম্পাদন করে থাকেন তবে আপনি এতে একটি নতুন- indexOf()
মত পদ্ধতি যুক্ত করতে পারেন String
, তবে এটিকে সংবেদনশীল করতে পারেন।
String.prototype.indexOfInsensitive = function (s, b) {
return this.toLowerCase().indexOf(s.toLowerCase(), b);
}
// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
defineProperty
, আমি পরামর্শ দিই Object.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
। দুই আপডেটগুলি: স্পষ্ট স্ট্রিং রূপান্তর ব্যবহার (s+'')
, এবং একটি লুপ অ গণনীয় ( for(var i in '') ...
দেখাবেন না indexOfInsensitive
।
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
আপনি এটি চেষ্টা করতে পারেন
str = "Wow its so COOL"
searchStr = "CoOl"
console.log(str.toLowerCase().includes(searchStr.toLowerCase()))
যে কোনও ভাষার উদাহরণ:
'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
এটি ২০১ 2016, এবং এটি করার কোনও সুস্পষ্ট উপায় নেই? আমি কিছু কপিপস্তার আশা করছিলাম। আমি যেতে হবে।
নকশার নোট: আমি মেমরির ব্যবহারটি হ্রাস করতে চেয়েছিলাম এবং তাই গতি উন্নত করতে চাই - সুতরাং স্ট্রিংগুলির কোনও অনুলিপি / পরিবর্তন করা যায় না। আমি ধরে নিয়েছি ভি 8 (এবং অন্যান্য ইঞ্জিনগুলি) এই ফাংশনটি অনুকূল করতে পারে।
//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
//TODO: guard conditions here
var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
var needleIndex = 0;
var foundAt = 0;
for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
var needleCode = needle.charCodeAt(needleIndex);
if (needleCode >= 65 && needleCode <= 90) needleCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
var haystackCode = haystack.charCodeAt(haystackIndex);
if (haystackCode >= 65 && haystackCode <= 90) haystackCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
//TODO: code to detect unicode characters and fallback to toLowerCase - when > 128?
//if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
if (haystackCode !== needleCode)
{
foundAt = haystackIndex;
needleIndex = 0; //Start again
}
else
needleIndex++;
if (needleIndex == needle.length)
return foundAt;
}
return -1;
}
নামটির জন্য আমার কারণ:
কেন না...:
toLowerCase()
- একই স্ট্রিংয়ে টুলওয়ারকেসে সম্ভাব্য পুনরাবৃত্তি কল।RegExp
- ভেরিয়েবলের সাথে অনুসন্ধান করতে বিশ্রী। এমনকি রেজিএক্সপ্যাক্স অবজেক্টটি অক্ষরগুলি থেকে বাঁচতে অস্বস্তিকরআরও ভাল অনুসন্ধান করতে নিম্নলিখিত কোডগুলি ব্যবহার করুন,
var myFav = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";
// Check for matches with the plain vanilla indexOf() method:
alert( theList.indexOf( myFav ) );
// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );
প্রথম সতর্কতায় (), জাভাস্ক্রিপ্ট "-1" ফিরে এসেছে - অন্য কথায়, ইনডেক্সফ () কোনও মিল খুঁজে পায় নি: এটি কেবল কারণ "জাভাস্ক্রিপ্ট" প্রথম স্ট্রিংয়ের ছোট হাতের অক্ষরে রয়েছে এবং দ্বিতীয়টিতে সঠিকভাবে মূলধন তৈরি হয়েছিল। ইনডেক্সফ () এর সাথে কেস-সংবেদনশীল অনুসন্ধানগুলি করতে, আপনি উভয় স্ট্রিং বড় হাতের বা ছোট হাতের অক্ষর তৈরি করতে পারেন। এর অর্থ হ'ল, দ্বিতীয় সতর্কতা () এর মতো, জাভাস্ক্রিপ্ট কেবল আপনি যে স্ট্রিংটির সন্ধান করছেন সেটির উপস্থিতি যাচাই করবে, মূলধন উপেক্ষা করা হবে।
রেফারেন্স, http://freewebdesignt টিউটোরিয়ালস / javaScript টিউটোরিয়ালস / jsStringObject / indexOfMethod.htm
যদি referrer
একটি অ্যারে হয়, আপনি ব্যবহার করতে পারেনfindIndex()
if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}
এখানে আমার গ্রহণ:
লিপি :
var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
$("#textContainer").html(originalText)
var text = $("#textContainer").html()
var val = $("#search").val()
if(val=="") return;
var matches = text.split(val)
for(var i=0;i<matches.length-1;i++) {
var ind = matches[i].indexOf(val)
var len = val.length
matches[i] = matches[i] + "<span class='selected'>" + val + "</span>"
}
$("#textContainer").html(matches.join(""))
এইচটিএমএল:
<input type="text" id="search">
<div id="textContainer">
lorem ipsum is simply dummy text of the printing and typesetting industry. lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of letraset sheets containing lorem ipsum passages, and more recently with desktop publishing software like Aldus pagemaker including versions of lorem ipsum.</div>
RegExp
ব্যবহারকারী ইনপুট থেকে সরাসরি তৈরি করার অসুবিধাগুলি সবার মনে রাখা উচিত । উদাহরণস্বরূপ একটি ব্যবহারকারী প্রবেশ করতে পারে*
এবং একটি ত্রুটিRegExp
কনস্ট্রাক্টরে নিক্ষেপ করা হবে । গৃহীত সমাধানটিতে এই সমস্যা নেই।