Jawaban:
Tambahkan .toLowerCase()
setelah referrer
. Metode ini mengubah string menjadi string huruf kecil. Kemudian, gunakan .indexOf()
menggunakan ral
bukan Ral
.
if (referrer.toLowerCase().indexOf("ral") === -1) {
Hal yang sama juga dapat dicapai dengan menggunakan Ekspresi Reguler (terutama berguna ketika Anda ingin menguji terhadap pola dinamis):
if (!/Ral/i.test(referrer)) {
// ^i = Ignore case flag for RegExp
.search
:var index = referrer.search(/Ral/i);
Pilihan lain adalah menggunakan metode pencarian sebagai berikut:
if (referrer.search(new RegExp("Ral", "i")) == -1) { ...
Terlihat lebih elegan daripada mengonversi seluruh string menjadi huruf kecil dan mungkin lebih efisien.
Dengan toLowerCase()
kode memiliki dua pass melewati string, satu pass ada di seluruh string untuk mengubahnya menjadi huruf kecil dan yang lainnya adalah untuk mencari indeks yang diinginkan.
Dengan RegExp
kode memiliki satu melewati string yang terlihat sesuai dengan indeks yang diinginkan.
Oleh karena itu, pada string panjang saya sarankan untuk menggunakan RegExp
versi (saya kira bahwa pada string pendek, efisiensi ini ada pada akun pembuatan RegExp
objek)
Gunakan RegExp:
if (!/ral/i.test(referrer)) {
...
}
Atau, gunakan .toLowerCase()
:
if (referrer.toLowerCase().indexOf("ral") == -1)
Dari ES2016 Anda juga dapat menggunakan metode yang sedikit lebih baik / lebih mudah / lebih elegan (case-sensitive):
if (referrer.includes("Ral")) { ... }
atau (tidak peka huruf besar-kecil):
if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }
Berikut adalah beberapa perbandingan .indexOf()
dan .includes()
:
https://dev.to/adroitcoder/includes-vs-indexof-in-javascript
includes
adalah case-sensitive di Chrome: try 'fooBar'.includes('bar')
==>false
Ada beberapa pendekatan di sini.
Jika Anda ingin melakukan pemeriksaan case-sensitive untuk hal ini saja, lakukan sesuatu seperti berikut ini.
if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
...
Atau, jika Anda melakukan pemeriksaan ini secara rutin, Anda dapat menambahkan indexOf()
metode seperti baru String
, tetapi membuatnya tidak sensitif.
String.prototype.indexOfInsensitive = function (s, b) {
return this.toLowerCase().indexOf(s.toLowerCase(), b);
}
// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...
defineProperty
, saya sarankan Object.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. Dua pembaruan: Konversi string eksplisit menggunakan (s+'')
, dan non-enumerable dalam satu lingkaran ( for(var i in '') ...
tidak ditampilkan indexOfInsensitive
.
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...
Anda bisa mencoba ini
str = "Wow its so COOL"
searchStr = "CoOl"
console.log(str.toLowerCase().includes(searchStr.toLowerCase()))
Contoh untuk bahasa apa pun:
'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
Ini tahun 2016, dan tidak ada cara yang jelas bagaimana melakukan ini? Saya berharap untuk beberapa copypasta. Saya akan mencoba.
Catatan desain: Saya ingin meminimalkan penggunaan memori, dan karenanya meningkatkan kecepatan - sehingga tidak ada penyalinan / mutasi string. Saya berasumsi V8 (dan mesin lainnya) dapat mengoptimalkan fungsi ini.
//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;
}
Alasan saya untuk nama:
Kenapa tidak...:
toLowerCase()
- panggilan potensial berulang ke toLowerCase pada string yang sama.RegExp
- canggung untuk mencari dengan variabel. Bahkan objek RegExp canggung harus melarikan diri karakterUntuk melakukan pencarian yang lebih baik gunakan kode berikut,
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() ) );
Pada lansiran pertama (), JavaScript mengembalikan "-1" - dengan kata lain, indexOf () tidak menemukan kecocokan: ini hanya karena "JavaScript" dalam huruf kecil di string pertama, dan huruf besar dalam huruf kedua. Untuk melakukan pencarian case-insensitive dengan indexOf (), Anda dapat membuat kedua string baik huruf besar atau kecil. Ini berarti bahwa, seperti pada peringatan kedua (), JavaScript hanya akan memeriksa kemunculan string yang Anda cari, kapitalisasi diabaikan.
Referensi, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
Jika referrer
array, Anda dapat menggunakanfindIndex()
if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}
Inilah pendapat saya:
Skrip :
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(""))
HTML:
<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
langsung dari input pengguna. Misalnya pengguna dapat masuk*
dan kesalahan akan dilemparkan keRegExp
konstruktor. Solusi yang diterima tidak memiliki masalah ini.