편집 :이 답변은 원래 9 년 전에 추가되었습니다. 오늘 당신은 옵션 localeCompare
과 함께 사용해야합니다 sensitivity: 'accent'
:
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'));
는 { sensitivity: 'accent' }
이야기 localeCompare()
같은과 같은 기본 문자의 두 가지 변종을 치료 하지 않는 한 그들은 (세 번째 예에서와 같이) 다른 악센트를 위.
또는 { sensitivity: 'base' }
기본 문자가 동일한 한 두 문자를 동등하게 취급하는을 사용할 수 있습니다 (따라서 동등 문자로 A
처리 á
).
참고 그 세 번째 매개 변수 localeCompare
IE10에서 지원 또는 낮추거나 당신이 그 브라우저를 지원해야하는 경우, 당신은 대체 어떤 종류의가 필요합니다 그래서 특정 모바일 브라우저 (위에 링크 된 페이지의 호환성 차트를 참조)되지 않습니다
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 */;
}
원래 답변
JavaScript에서 대소 문자를 구분하지 않는 비교를 수행하는 가장 좋은 방법 match()
은 i
플래그 와 함께 RegExp 메소드 를 사용 하는 것 입니다.
대소 문자를 구분하지 않는 검색
비교되는 두 문자열이 모두 상수가 아닌 변수 인 경우 문자열에서 RegExp를 생성해야하지만 RegExp 생성자에 문자열을 전달하면 문자열에 특수 정규 표현식이있는 경우 일치하지 않거나 일치하지 않을 수 있으므로 조금 더 복잡합니다. 그 안에 문자.
당신이 국제화에 대해 관심이있는 경우 사용하지 않습니다 toLowerCase()
또는 toUpperCase()
이 모든 언어의 정확한 대소 문자를 구분 비교를 제공하지 않는 한.
http://www.i18nguy.com/unicode/turkish-i18n.html
.localeCompare()
자바 스크립트 메소드를 참조하십시오 . 작성 당시 최신 브라우저에서만 지원됩니다 (IE11 +). developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…