수정 된 답변
이 질문에 답한 것은 꽤 오래되었습니다. 문화적 이슈가 여전히 사실이지만 (나는 그들이 멀리 떠날 것이라고 생각하지 않는다), ECMA-402 표준의 개발은 구식의 답변을 만들었다. !
var locale = 'en'; // that should be somehow detected and passed on to JS
var firstString = "I might be A different CASE";
var secondString = "i might be a different case";
if (firstString.localeCompare(secondString, locale, {sensitivity: 'accent'}) === 0) {
// do something when equal
}
이 두 개의 문자열을 대소 문자를 구분하지만, 악센트에 민감한를 비교합니다 (예를 들어 A = A :
지역화 된 문자열을 비교하기위한 가장 좋은 방법은 적절한 로케일과 옵션 기능 toLocaleCompare()을 사용하는 것으로 보인다). 이 성능상의 이유로 충분하지 않으면
, 당신은 매개 변수로 로케일을 통과 toLocaleUpperCase()
또는 toLocaleLowerCase()
중 하나를 사용할 수 있습니다 : 이론적으로
if (firstString.toLocaleUpperCase(locale) === secondString.toLocaleUpperCase(locale)) {
// do something when equal
}
는 차이가있을 수 없습니다. 당신이 정말로 Internationalization (국제화)에서이 질문을 의미하는 경우 연습, 미묘한 구현 세부 사항 (또는 지정된 브라우저에서 구현의 부족) 다른 결과를 얻을 수 있습니다 ...
원래 대답
에서 나는 확실하지 않다 태그를 사용했지만 이후에 ...
아마도 가장 예기치 않은 대답은 아니요입니다.
대소 문자 변환을 사용하는 경우 tons of problems이 있습니다. 자바 스크립트의 경우와 같이 언어를 나타내지 않고 대소 문자를 변환하려는 경우 필연적으로 기능적 문제가 발생합니다. 예 :
- 대문자와 소문자의 개념이없는 많은 자연어가 있습니다. 그것들을 변환하려고 시도 할 때 아무런 의미가 없다.
- 문자열 변환에 대한 언어 별 규칙이 있습니다. 독일어 sharp S 문자 (ß)는 두 개의 대문자 S 문자 (SS)로 변환되도록 바인딩됩니다.
- 터키어와 아제르바이잔 어 (또는 원하는 경우 Azeri)는 "매우 이상 함"concept of two i characters : 점이없는 ı (대문자 I로 변환 됨)와 점선으로 된 i (대문자로 변환 함) < -이 글꼴은 올바른 표현을 허용하지 않지만 이것은 정말로 다른 글리프입니다.)
- 그리스어에는 많은 "이상한"변환 규칙이 있습니다. 한 가지 특별한 규칙은 대문자 sigma (Σ)을 말합니다. 단어의 위치에 따라 규칙적인 σ (σ)와 최종 σ (σ)의 두 소문자가 있습니다. "악센트 부호"문자와 관련하여 다른 변환 규칙이 있지만 변환 함수 구현 중에는 일반적으로 생략됩니다.
- 일부 언어 has title-case letters 즉 Lj는 LJ 또는 덜 적절하게 LJ로 변환되어야합니다. 동일한 것은 ligatures과 관련이 있습니다.
- 마지막으로 많은 숫자가 compatibility characters인데, 이는 비교하려고하는 것과 같은 것을 의미 할 수 있지만 완전히 다른 문자로 구성 될 수 있습니다. 그것을 악화시키기 위해, "ae"와 같은 것들은 독일어와 핀란드어에서는 "ä"와 같을 수 있지만 덴마크어에서는 "æ"와 같은 것입니다.
사용자 입력을 글자 그대로 비교하는 것이 아니라 글자를 직접 비교하는 것이 좋습니다. 사용자와 관련이 없다면 문제가되지 않지만 대소 문자 변환에는 항상 시간이 걸립니다. 왜 귀찮아?
대부분의 문자열에는 소문자가 더 많이 포함될 것이므로 적어도 소문자로 변환하는 것은 처리 할 문자가 적지 만 다른 문자는 처리하지 않을 것입니다. 차이점이 있습니까? –
JavaScript에서 다른 점이 있는지 확실하지 않은 경우 MSDN 링크에서 왕복을 할 수없는 문자가 있음을 나타냅니다. "문자열은 대문자로 표준화되어야합니다. 왕복 여행을 할 수없는 것은 문자를 한 로케일에서 다른 로케일로 변환 한 다음 변환 된 문자에서 정확하게 원래 문자를 검색하는 것을 의미합니다. " - .Net에 고유 한 것이거나 모든/대부분의 프로그래밍 언어에 적용되는지 확실하지 않습니다. –
브라우저의 의존성에 따라 브라우저에서 내부적으로 두 가지 방법이 어떻게 작동하는지 추측 할 수 있습니다. 그러나 둘 다 문자를 반복하여 검사하고 변환하므로 문제가되지 않습니다. 실생활에서, 그것은 중요하지 않습니다. – adeneo