Pregunta Comparación de cadenas insensibles a mayúsculas y minúsculas


¿Cómo realizo la comparación de cadenas insensibles a mayúsculas / minúsculas en JavaScript?


730
2018-01-26 16:07


origen


Respuestas:


La forma más sencilla de hacerlo (si no le preocupan los caracteres especiales Unicode) es llamar toUpperCase:

var areEqual = string1.toUpperCase() === string2.toUpperCase();

861
2018-01-26 16:09



EDITAR: Esta respuesta tiene 7 años. Hoy deberías usar localeCompare.

Respuesta original

La mejor forma de hacer una comparación insensible a mayúsculas y minúsculas en JavaScript es usar el método RegExp match () con el indicador 'i'.

JavaScript: búsqueda insensible a mayúsculas y minúsculas

Cuando las dos cadenas que se comparan son variables (no constantes), es un poco más complicado porque necesita generar un RegExp desde la cadena, pero pasar la cadena al constructor RegExp puede dar como resultado coincidencias incorrectas o fallas si la cadena tiene expresiones regulares especiales. personajes en ella.

Si le importa la internacionalización, no use toLowerCase () o toUpperCase () ya que no proporciona comparaciones precisas de mayúsculas y minúsculas en todos los idiomas.

http://www.i18nguy.com/unicode/turkish-i18n.html


89
2018-01-26 16:19



Recuerde que la carcasa es una operación específica del lugar. Dependiendo de la situación, es posible que desee tenerlo en cuenta. Por ejemplo, si está comparando nombres de dos personas, es posible que desee considerar la configuración regional, pero si está comparando valores generados por la máquina, como UUID, es posible que no. Esta es la razón por la que uso la siguiente función en mi biblioteca de utilidades (tenga en cuenta que la verificación de tipos no está incluida por razones de rendimiento).

function compareStrings (string1, string2, ignoreCase, useLocale) {
    if (ignoreCase) {
        if (useLocale) {
            string1 = string1.toLocaleLowerCase();
            string2 = string2.toLocaleLowerCase();
        }
        else {
            string1 = string1.toLowerCase();
            string2 = string2.toLowerCase();
        }
    }

    return string1 === string2;
}

24
2017-12-01 23:57



Con la ayuda de la expresión regular también podemos lograrlo.

(/keyword/i).test(source)

/i es para ignorar el caso. Si no es necesario, podemos ignorar y probar la coincidencia NO sensible a mayúsculas y minúsculas, como

(/keyword/).test(source)

24
2017-09-24 14:56



si le preocupa la dirección de la desigualdad (quizás quiera ordenar una lista) usted tiene que hacer conversión de casos, y como hay más caracteres en minúsculas en unicode que en mayúscula, LowCase es probablemente la mejor conversión para usar.

function my_strcasecmp( a, b ) 
{
    if((a+'').toLowerCase() > (b+'').toLowerCase()) return 1  
    if((a+'').toLowerCase() < (b+'').toLowerCase()) return -1
    return 0
}

Javascript parece usar la configuración regional "C" para las comparaciones de cadenas, por lo que el orden resultante será ser feo si las cadenas contienen letras que no sean ASCII. no se puede hacer mucho al respecto sin realizar una inspección mucho más detallada de las cadenas.


9
2017-08-06 00:42



Recientemente, he creado una micro biblioteca que proporciona ayudantes de cadenas que no distinguen entre mayúsculas y minúsculas: https://github.com/nickuraltsev/ignore-case. (Usa toUpperCase internamente.)

var ignoreCase = require('ignore-case');

ignoreCase.equals('FOO', 'Foo'); // => true
ignoreCase.startsWith('foobar', 'FOO'); // => true
ignoreCase.endsWith('foobar', 'BaR'); // => true
ignoreCase.includes('AbCd', 'c'); // => true
ignoreCase.indexOf('AbCd', 'c'); // => 2

8
2018-05-04 20:23



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

  1. Las aplicaciones internacionalizadas deben evitar string.toUpperCase y string.toLowerCase. Use una expresión regular que ignore el caso en su lugar. Por ejemplo, var needleRegExp = new RegExp(needle, "i"); seguido por needleRegExp.test(haystack).
  2. En general, es posible que no sepas el valor de needle. Ten cuidado de que needle no contiene ninguna expresión regular caracteres especiales. Escape de estos usando needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");.
  3. En otros casos, si quiere coincidir con precisión needle y haystack, simplemente ignorando la caja, asegúrese de agregar "^" al principio y "$" al final de tu 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);
if (result) {
    // Your code here
}

5
2017-07-06 14:04