source

대소문자를 구분하지 않음

factcode 2022. 11. 25. 20:48
반응형

대소문자를 구분하지 않음

다음과 같은 것이 있습니다.

if (referrer.indexOf("Ral") == -1) { ... }

제가 좋아하는 것은Ral대소문자를 구분하지 않기 때문에RAl,rAl, 등, 일치합니다.

라고 말할 수 있는 방법이 있을까요?Ral대소문자를 구분해야 합니까?

더하다.toUpperCase()끝나고referrer. 이 메서드는 문자열을 대문자로 변환합니다.그 후 를 사용합니다..indexOf()사용.RAL대신Ral.

if (referrer.toUpperCase().indexOf("RAL") === -1) { 

또한 정규식을 사용하여 동일한 작업을 수행할 수도 있습니다(특히 동적 패턴에 대해 테스트하는 경우에 유용합니다).

if (!/Ral/i.test(referrer)) {
   //    ^i = Ignore case flag for RegExp

다른 옵션은 다음과 같이 검색 방법을 사용하는 것입니다.

if (referrer.search(new RegExp("Ral", "i")) == -1) { ...

전체 문자열을 소문자로 변환하는 것보다 더 우아해 보이고 더 효율적일 수 있습니다.
와 함께toLowerCase()코드에는 스트링 위에 두 개의 패스(pass)가 있으며, 한 개의 패스(pass)는 스트링 전체에 있으며, 다른 하나는 원하는 인덱스를 찾는 것입니다.
와 함께RegExp코드는 원하는 인덱스와 일치하는 것으로 보이는 문자열을 1회 통과합니다.

따라서 긴 스트링에서는 다음 명령어를 사용할 것을 권장합니다.RegExpversion (짧은 스트링에서는 이 효율은, 숏 스트링의 작성에 의해서 실현됩니다).RegExp오브젝트(단,

ES2016에서는 조금 더 나은 방법/간단한 방법/더 우아한 방법(대문자와 소문자가 구분됨)도 사용할 수 있습니다.

if (referrer.includes("Ral")) { ... }

또는 (대문자와 소문자를 구분하지 않음):

if (referrer.toLowerCase().includes(someString.toLowerCase())) { ... }

다음은 의 비교입니다..indexOf()그리고..includes(): https://dev.to/adroitcoder/includes-vs-indexof-in-javascript

RegExp 사용:

if (!/ral/i.test(referrer)) {
    ...
}

또는,.toLowerCase():

if (referrer.toLowerCase().indexOf("ral") == -1)

여기에는 몇 가지 방법이 있습니다.

이 인스턴스만 대소문자를 구분하지 않는 검사를 수행하려면 다음과 같은 작업을 수행합니다.

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) == -1) {
    ...

또는 이 검사를 정기적으로 수행하는 경우 새 검사를 추가할 수 있습니다.indexOf()하는 것과 같은 방법String대소문자를 구분하지 않도록 합니다.

String.prototype.indexOfInsensitive = function (s, b) {
    return this.toLowerCase().indexOf(s.toLowerCase(), b);
}

// Then invoke it
if (referrer.indexOfInsensitive("Ral") == -1) { ...

이거 드셔보세요

str = "Wow its so COOL"
searchStr = "CoOl"

console.log(str.toLowerCase().includes(searchStr.toLowerCase()))

모든 언어의 예:

'My name is Хведор'.toLocaleLowerCase().includes('ХвЕдОр'.toLocaleLowerCase())
if (referrer.toUpperCase().indexOf("RAL") == -1) { ...

다음은 ES6에 따른 성능 저하 순서 옵션입니다.

포함한다

if (referrer.toLowerCase().includes("Ral".toLowerCase())) { ... }

Index Of (이것에 의해, 포함과 같거나 더 좋은 결과가 되는 경우가 있습니다)

if (referrer.toLowerCase().indexOf("Ral".toLowerCase()) !== -1) { ... }

경기

if (referrer.match(new RegExp("Ral", 'i'))) { ... }

벤치마크 결과: https://jsben.ch/IBbnl

더 나은 검색을 수행하려면 다음 코드를 사용하십시오.

var myFav   = "javascript";
var theList = "VB.NET, C#, PHP, Python, JavaScript, and Ruby";

// Check for matches with the plain vanilla indexOf() method:
alert( theList.indexOf( myFav ) );

// Now check for matches in lower-cased strings:
alert( theList.toLowerCase().indexOf( myFav.toLowerCase() ) );

첫 번째 경보()에서 JavaScript는 "-1"을 반환했습니다.즉, indexOf()가 일치하지 않았습니다.이것은 단순히 "JavaScript"가 첫 번째 문자열에서 소문자로 표시되고 두 번째 문자열에서 올바르게 대문자로 표시되기 때문입니다.indexOf()를 사용하여 대소문자를 구분하지 않는 검색을 수행하려면 두 문자열 모두 대문자 또는 소문자로 지정합니다.즉, 두 번째 경보()와 마찬가지로 JavaScript는 찾고 있는 문자열만 체크하고 대문자는 무시합니다.

레퍼런스, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm

ifreferrer배열이므로 하실 수 .findIndex()

 if(referrer.findIndex(item => 'ral' === item.toLowerCase()) == -1) {...}

2016년인데 어떻게 해야 할지 모르겠어요?카피파스타를 좀 갖고 싶어서요해보겠습니다.

설계 노트:메모리 사용량을 최소화하고 속도를 향상시키고 싶었기 때문에 문자열 복사/음소거가 발생하지 않았습니다.V8(및 기타 엔진)은 이 기능을 최적화할 수 있다고 생각합니다.

//TODO: Performance testing
String.prototype.naturalIndexOf = function(needle) {
    //TODO: guard conditions here
    
    var haystack = this; //You can replace `haystack` for `this` below but I wan't to make the algorithm more readable for the answer
    var needleIndex = 0;
    var foundAt = 0;
    for (var haystackIndex = 0; haystackIndex < haystack.length; haystackIndex++) {
        var needleCode = needle.charCodeAt(needleIndex);
        if (needleCode >= 65 && needleCode <= 90) needleCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
        var haystackCode = haystack.charCodeAt(haystackIndex);
        if (haystackCode >= 65 && haystackCode <= 90) haystackCode += 32; //ToLower. I could have made this a function, but hopefully inline is faster and terser
        
        //TODO: code to detect unicode characters and fallback to toLowerCase - when > 128?
        //if (needleCode > 128 || haystackCode > 128) return haystack.toLocaleLowerCase().indexOf(needle.toLocaleLowerCase();
        if (haystackCode !== needleCode)
        {
            foundAt = haystackIndex;
            needleIndex = 0; //Start again
        }
        else
            needleIndex++;
            
        if (needleIndex == needle.length)
            return foundAt;
    }
    
    return -1;
}

이름을 붙이는 이유:

  • 이름에 IndexOf가 있어야 합니다.
  • 접미사 단어 추가 안 함 - IndexOf는 다음 매개 변수를 나타냅니다.그래서 대신 접두사를 붙여주세요.
  • 대소문자를 구분하지 않음 접두사가 너무 깁니다.
  • 기본 대소문자를 구분하는 비교는 애당초 인간에게 자연스러운 것이 아니기 때문에 "자연스럽다"는 것은 좋은 후보입니다.

왜...:

  • toLowerCase()이 반복될 수 .- " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "
  • RegExp변수로검색하기어렵니다.조차 문자RegExp를 합니다.

제 생각은 이렇습니다.

스크립트:

var originalText = $("#textContainer").html()
$("#search").on('keyup', function () {
  $("#textContainer").html(originalText)
  var text = $("#textContainer").html()
  var val = $("#search").val()
  if(val=="") return;
  var matches = text.split(val)
  for(var i=0;i<matches.length-1;i++) {
    var ind =  matches[i].indexOf(val)
    var len = val.length
      matches[i] = matches[i] + "<span class='selected'>" + val + "</span>"
  }
  $("#textContainer").html(matches.join(""))

HTML:

<input type="text" id="search">
<div id="textContainer">
lorem ipsum is simply dummy text of the printing and typesetting industry. lorem ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of letraset sheets containing lorem ipsum passages, and more recently with desktop publishing software like Aldus pagemaker including versions of lorem ipsum.</div>

코드펜

더 좋아~

if (~referrer.toUpperCase().indexOf("RAL")) { 
    console.log("includes")
}

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/8993773/contains-case-insensitive

반응형