Saya memiliki yang berikut ini:
if (referrer.indexOf("Ral") == -1) { ... }
Apa yang saya ingin lakukan adalah untuk membuat Ral
kasus sensitif, sehingga dapat RAl
, rAl
, dll dan masih cocok.
Apakah ada cara untuk mengatakan bahwa Ral
itu tidak peka terhadap huruf besar-kecil?
javascript
string
case-sensitive
case-insensitive
Nate Pet
sumber
sumber
RegExp
langsung dari input pengguna. Misalnya pengguna dapat masuk*
dan kesalahan akan dilemparkan keRegExp
konstruktor. Solusi yang diterima tidak memiliki masalah ini.Jawaban:
Tambahkan
.toLowerCase()
setelahreferrer
. Metode ini mengubah string menjadi string huruf kecil. Kemudian, gunakan.indexOf()
menggunakanral
bukanRal
.Hal yang sama juga dapat dicapai dengan menggunakan Ekspresi Reguler (terutama berguna ketika Anda ingin menguji terhadap pola dinamis):
sumber
toLocaleLowerCase()
( ref ).search
:var index = referrer.search(/Ral/i);
Pilihan lain adalah menggunakan metode pencarian sebagai berikut:
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 pembuatanRegExp
objek)sumber
Gunakan RegExp:
Atau, gunakan
.toLowerCase()
:sumber
Dari ES2016 Anda juga dapat menggunakan metode yang sedikit lebih baik / lebih mudah / lebih elegan (case-sensitive):
atau (tidak peka huruf besar-kecil):
Berikut adalah beberapa perbandingan
.indexOf()
dan.includes()
: https://dev.to/adroitcoder/includes-vs-indexof-in-javascriptsumber
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.
Atau, jika Anda melakukan pemeriksaan ini secara rutin, Anda dapat menambahkan
indexOf()
metode seperti baruString
, tetapi membuatnya tidak sensitif.sumber
defineProperty
, saya sarankanObject.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 ditampilkanindexOfInsensitive
.sumber
Anda bisa mencoba ini
sumber
Contoh untuk bahasa apa pun:
sumber
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.
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 karaktersumber
Untuk melakukan pencarian yang lebih baik gunakan kode berikut,
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
sumber
Jika
referrer
array, Anda dapat menggunakanfindIndex()
sumber
Inilah pendapat saya:
Skrip :
HTML:
Codepen
sumber