EDIT : Jawaban ini awalnya ditambahkan 9 tahun yang lalu. Hari ini Anda harus menggunakan localeCompare
dengan sensitivity: 'accent'
opsi:
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'));
The { sensitivity: 'accent' }
memberitahu localeCompare()
untuk mengobati dua varian surat dasar yang sama sebagai yang sama kecuali mereka memiliki aksen yang berbeda (seperti dalam contoh ketiga) di atas.
Atau, Anda dapat menggunakan { sensitivity: 'base' }
, yang memperlakukan dua karakter sebagai setara selama karakter dasarnya adalah sama (sehingga A
akan diperlakukan sebagai setara dengan á
).
Perhatikan bahwa parameter ketiga localeCompare
tidak didukung di IE10 atau lebih rendah atau peramban seluler tertentu (lihat bagan kompatibilitas pada halaman yang ditautkan di atas), jadi jika Anda perlu mendukung peramban tersebut, Anda akan memerlukan semacam fallback:
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 */;
}
Jawaban asli
Cara terbaik untuk melakukan perbandingan kasus yang tidak sensitif dalam JavaScript adalah menggunakan match()
metode RegExp dengan i
benderanya.
Pencarian case-sensitive
Ketika kedua string yang dibandingkan adalah variabel (bukan konstanta), maka itu sedikit lebih rumit karena Anda perlu membuat RegExp dari string tetapi meneruskan string ke konstruktor RegExp dapat menghasilkan kecocokan yang salah atau kecocokan yang gagal jika string memiliki regex khusus karakter di dalamnya.
Jika Anda peduli tentang internasionalisasi, jangan gunakan toLowerCase()
atau toUpperCase()
karena tidak memberikan perbandingan kasus-sensitif yang akurat dalam semua bahasa.
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()
metode javascript yang baru ditambahkan . Hanya didukung oleh browser modern pada saat penulisan (IE11 +). lihat developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…