tolowercase sensitive localecompare ignorecase equalsignorecase javascript search string-comparison case-insensitive

javascript - sensitive - Búsqueda insensible a mayúsculas



localecompare (10)

ES6 +:

let string="Stackoverflow is the BEST"; let searchstring="best"; let found = string.toLowerCase() .includes(searchstring.toLowerCase());

includes() devuelve true si searchString aparece en una o más posiciones o false contrario.

Estoy intentando obtener una búsqueda que no distinga mayúsculas de minúsculas con dos cadenas en JavaScript funcionando

Normalmente sería así:

var string="Stackoverflow is the BEST"; var result= string.search(/best/i); alert(result);

La /i sería para mayúsculas y minúsculas.

Pero necesito buscar una segunda cadena; Sin la bandera funciona perfecto.

var string="Stackoverflow is the BEST"; var searchstring="best"; var result= string.search(searchstring); alert(result);

Si agrego el indicador /i al ejemplo anterior, buscaría la cadena de búsqueda y no la variable "cadena de búsqueda" (el siguiente ejemplo no funciona):

var string="Stackoverflow is the BEST"; var searchstring="best"; var result= string.search(/searchstring/i); alert(result);

¿Cómo puedo conseguir esto?


Hago esto a menudo y uso un prototipo simple de 5 líneas que acepta varargs. Es rápido y funciona en todas partes .

myString.containsIgnoreCase(''red'',''orange'',''yellow'')

/** * @param {...string} var_strings Strings to search for * @return {boolean} true if ANY of the arguments is contained in the string */ String.prototype.containsIgnoreCase = function(var_strings) { const thisLowerCase = this.toLowerCase() for (let i = 0; i < arguments.length; i++) { let needle = arguments[i] if (thisLowerCase.indexOf(needle.toLowerCase()) >= 0) { return true } } return false } /** * @param {...string} var_strings Strings to search for * @return {boolean} true if ALL of the arguments are contained in the string */ String.prototype.containsAllIgnoreCase = function(var_strings) { const thisLowerCase = this.toLowerCase() for (let i = 0; i < arguments.length; i++) { let needle = arguments[i] if (thisLowerCase.indexOf(needle.toLowerCase()) === -1) { return false } } return true } // Unit test let content = ` FIRST SECOND "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat." FOO BAR ` let data = [ ''foo'', ''Foo'', ''foobar'', ''barfoo'', ''first'', ''second'' ] let result data.forEach(item => { console.log(''Searching for'', item) result = content.containsIgnoreCase(item) console.log(result ? ''Found'' : ''Not Found'') }) console.log(''Searching for'', ''x, y, foo'') result = content.containsIgnoreCase(''x'', ''y'', ''foo''); console.log(result ? ''Found'' : ''Not Found'') console.log(''Searching for all'', ''foo, bar, foobar'') result = content.containsAllIgnoreCase(''foo'', ''bar'', ''foobar''); console.log(result ? ''Found'' : ''Not Found'') console.log(''Searching for all'', ''foo, bar'') result = content.containsAllIgnoreCase(''foo'', ''bar''); console.log(result ? ''Found'' : ''Not Found'')


Hay dos formas de comparación entre mayúsculas y minúsculas:

  1. Convierta cadenas a mayúsculas y luego compárelas con el operador estricto ( === ). Cómo el operador estricto trata a los operandos, lea cosas en: http://www.thesstech.com/javascript/relational-logical-operators

  2. Coincidencia de patrones utilizando métodos de cadena:

    Utilice el método de cadena de "búsqueda" para la búsqueda no sensible a mayúsculas Lea acerca de la búsqueda y otros métodos de cadena en: http://www.thesstech.com/pattern-matching-using-string-methods

    <!doctype html> <html> <head> <script> // 1st way var a = "apple"; var b = "APPLE"; if (a.toUpperCase() === b.toUpperCase()) { alert("equal"); } //2nd way var a = " Null and void"; document.write(a.search(/null/i)); </script> </head> </html>


Me gusta la respuesta de @ CHR15TO, a diferencia de otras respuestas que he visto en otras preguntas similares, esa respuesta realmente muestra cómo escapar de una cadena de búsqueda proporcionada por el usuario (en lugar de decir que sería necesaria sin mostrar cómo).

Sin embargo, sigue siendo bastante torpe, y posiblemente relativamente más lento. Entonces, ¿por qué no tener una solución específica a lo que probablemente sea un requisito común para los codificadores? (¿Y por qué no incluirlo en la API ES6 BTW?)

Mi respuesta [ https://.com/a/38290557/887092] en una pregunta similar permite lo siguiente:

var haystack = ''A. BAIL. Of. Hay.''; var needle = ''bail.''; var index = haystack.naturalIndexOf(needle);


Noté que si el usuario ingresa una cadena de texto pero deja la entrada sin seleccionar ninguna de las opciones de autocompletar, no se establece ningún valor en la entrada oculta, incluso si la cadena coincide con una en la matriz. Entonces, con la ayuda de las otras respuestas hice esto:

var $local_source = [{ value: 1, label: "c++" }, { value: 2, label: "java" }, { value: 3, label: "php" }, { value: 4, label: "coldfusion" }, { value: 5, label: "javascript" }, { value: 6, label: "asp" }, { value: 7, label: "ruby" }]; $(''#search-fld'').autocomplete({ source: $local_source, select: function (event, ui) { $("#search-fld").val(ui.item.label); // display the selected text $("#search-fldID").val(ui.item.value); // save selected id to hidden input return false; }, change: function( event, ui ) { var isInArray = false; $local_source.forEach(function(element, index){ if ($("#search-fld").val().toUpperCase() == element.label.toUpperCase()) { isInArray = true; $("#search-fld").val(element.label); // display the selected text $("#search-fldID").val(element.value); // save selected id to hidden input console.log(''inarray: ''+isInArray+'' label: ''+element.label+'' value: ''+element.value); }; }); if(!isInArray){ $("#search-fld").val(''''); // display the selected text $( "#search-fldID" ).val( ui.item? ui.item.value : 0 ); } }


Reemplazar

var result= string.search(/searchstring/i);

con

var result= string.search(new RegExp(searchstring, "i"));


Sí, usa .match , en lugar de .search . El resultado de la llamada .match devolverá la cadena real que coincidió, pero aún puede usarse como un valor booleano.

var string = " is the BEST"; var result = string.match(/best/i); // result == ''BEST''; if (result){ alert(''Matched''); }

Usar una expresión regular como esa es probablemente la forma más ordenada y obvia de hacerlo en JavaScript, pero tenga en cuenta que es una expresión regular y, por lo tanto, puede contener metacaracteres de expresiones regulares. Si desea tomar la cadena de otro lugar (por ejemplo, la entrada del usuario), o si desea evitar tener que escapar muchos metacaracteres, entonces es mejor que use indexOf esta manera:

matchString = ''best''; // If the match string is coming from user input you could do // matchString = userInput.toLowerCase() here. if (string.toLowerCase().indexOf(matchString) != -1){ alert(''Matched''); }


Si le preocupa el caso de "clase de caracteres no terminados", eliminar todos los caracteres no alfanuméricos sería útil:

searchstring = searchstring.replace(/[^a-zA-Z 0-9]+/g,'''');


Si solo está buscando una cadena en lugar de una expresión regular más complicada, puede usar indexOf() , pero recuerde en minúsculas las dos cadenas primero porque indexOf() mayúsculas y minúsculas:

var string=" is the BEST"; var searchstring="best"; // lowercase both strings var lcString=string.toLowerCase(); var lcSearchString=searchstring.toLowerCase(); var result = lcString.indexOf(lcSearchString)>=0; alert(result);

O en una sola línea:

var result = string.toLowerCase().indexOf(searchstring.toLowerCase())>=0;


Supongamos que queremos encontrar la needle variable de cadena en el haystack variable de cadena. Hay tres trampas:

  1. Las aplicaciones internacionalizadas deben evitar string.toUpperCase y string.toLowerCase . Utilice una expresión regular que ignora el caso en su lugar. Por ejemplo, var needleRegExp = new RegExp(needle, "i"); seguido de needleRegExp.test(haystack) .
  2. En general, es posible que no sepa el valor de la needle . Tenga cuidado de que la needle no contenga ningún carácter especial de expresión regular. Escape de estos usando needle.replace(/[-[/]{}()*+?.,//^$|#/s]/g, "//$&"); .
  3. En otros casos, si desea hacer coincidir con precisión la needle y el haystack , simplemente ignorando el caso, asegúrese de agregar "^" al comienzo y "$" al final de su constructor de expresiones regulares.

Teniendo en cuenta los puntos (1) y (2), un ejemplo sería:

var haystack = "A. BAIL. Of. Hay."; var needle = "bail."; var needleRegExp = new RegExp(needle.replace(/[-[/]{}()*+?.,//^$|#/s]/g, "//$&"), "i"); var result = needleRegExp.test(haystack); alert(result);