JavaScript'te büyük/küçük harfe duyarlı olmayan dize karşılaştırmasını nasıl yapabilirim?
EDIT: Bu cevap ilk olarak 9 yıl önce eklenmiştir. Bugün localeCompare
'i sensitivity: 'accent'
seçeneği ile kullanmalısınız:
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'));
Yukarıdaki { sensitivity: 'accent' }
ifadesi localeCompare()
fonksiyonuna aynı temel harfin iki varyantını farklı aksanlara sahip olmadıkları sürece (üçüncü örnekte olduğu gibi) aynı olarak değerlendirmesini söyler.
Alternatif olarak, temel karakterleri aynı olduğu sürece iki karakteri eşdeğer olarak ele alan { sensitivity: 'base' }
kullanabilirsiniz (yani A
, á
ile eşdeğer olarak ele alınacaktır).
Not localeCompare`in üçüncü parametresinin IE10 veya daha düşük sürümlerde veya belirli mobil tarayıcılarda desteklenmediğini unutmayın (yukarıda bağlantısı verilen sayfadaki uyumluluk tablosuna bakın), bu nedenle bu tarayıcıları desteklemeniz gerekiyorsa, bir tür geri dönüşe ihtiyacınız olacaktır:
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 */;
}
Orijinal cevap
JavaScript'te büyük/küçük harfe duyarlı olmayan bir karşılaştırma yapmanın en iyi yolu RegExp match()
yöntemini i
bayrağı ile kullanmaktır.
https://stackoverflow.com/questions/177719/javascript-case-insensitive-search
Karşılaştırılan her iki dize de değişken (sabit değil) olduğunda, bu biraz daha karmaşıktır 'çünkü dizeden bir RegExp oluşturmanız gerekir, ancak dizeyi RegExp yapıcısına geçirmek, dizede özel regex karakterleri varsa yanlış eşleşmelere veya başarısız eşleşmelere neden olabilir.
Uluslararasılaştırmayı önemsiyorsanız toLowerCase()
veya toUpperCase()
kullanmayın, çünkü tüm dillerde doğru büyük/küçük harfe duyarsız karşılaştırmalar sağlamaz.