Question Comparaison des chaînes JavaScript insensible à la casse


Comment effectuer une comparaison de chaînes insensible à la casse en JavaScript?


730
2018-01-26 16:07


origine


Réponses:


La façon la plus simple de le faire (si vous ne vous inquiétez pas des caractères spéciaux Unicode) est d'appeler toUpperCase:

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

861
2018-01-26 16:09



MODIFIER: Cette réponse a 7 ans. Aujourd'hui, vous devriez utiliser localeCompare.

Réponse originale

La meilleure façon d'effectuer une comparaison insensible à la casse en JavaScript consiste à utiliser la méthode matchP () RegExp avec l'indicateur 'i'.

JavaScript: recherche insensible à la casse

Lorsque les deux chaînes comparées sont des variables (pas constantes), c'est un peu plus compliqué car vous devez générer un RegExp à partir de la chaîne mais passer la chaîne au constructeur RegExp peut entraîner des correspondances incorrectes ou des correspondances échouées si la chaîne a une regex spéciale caractères dedans.

Si vous vous souciez de l'internationalisation, n'utilisez pas toLowerCase () ou toUpperCase () car elle ne fournit pas de comparaisons précises et insensibles à la casse dans toutes les langues.

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


89
2018-01-26 16:19



Rappelez-vous que le boîtier est une opération spécifique à la localisation. Selon le scénario, vous pouvez prendre cela en compte. Par exemple, si vous comparez les noms de deux personnes, vous voudrez peut-être prendre en compte les paramètres régionaux, mais si vous comparez des valeurs générées par des machines telles que l'UUID, vous risquez de ne pas le faire. C'est pourquoi j'utilise la fonction suivante dans ma bibliothèque utils (notez que la vérification de type n'est pas incluse pour des raisons de performance).

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



Avec l'aide de l'expression régulière nous pouvons également réaliser.

(/keyword/i).test(source)

/i est pour ignorer le cas. Si ce n'est pas nécessaire, nous pouvons ignorer et tester pour ne pas correspondre à la casse comme

(/keyword/).test(source)

24
2017-09-24 14:56



si vous êtes préoccupé par la direction de l'inégalité (peut-être que vous voulez trier une liste) Vous devez faire une conversion de casse, et comme il y a plus de caractères minuscules dans unicode que de majuscules, LowCase est probablement la meilleure conversion à utiliser.

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

Javascript semble utiliser la locale "C" pour les comparaisons de chaînes de sorte que l'ordre résultant sera être moche si les chaînes contiennent d'autres lettres que ASCII. il n'y a pas grand-chose à faire à ce sujet sans faire une inspection beaucoup plus détaillée des cordes.


9
2017-08-06 00:42



J'ai récemment créé une micro bibliothèque qui fournit des aides à la chaîne insensibles à la casse: https://github.com/nickuraltsev/ignore-case. (Il utilise toUpperCase intérieurement.)

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



Supposons que nous voulons trouver la variable de chaîne needle dans la variable de chaîne haystack. Il y a trois pièges:

  1. Les applications internationalisées devraient éviter string.toUpperCase et string.toLowerCase. Utilisez une expression régulière qui ignore le cas à la place. Par exemple, var needleRegExp = new RegExp(needle, "i"); suivi par needleRegExp.test(haystack).
  2. En général, vous ne connaissez peut-être pas la valeur de needle. Faites attention à ce que needle ne contient aucune expression régulière caractères spéciaux. Échappez-les en utilisant needle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");.
  3. Dans d'autres cas, si vous voulez correspondre exactement needle et haystack, en ignorant le cas, assurez-vous d'ajouter "^" au début et "$" à la fin de votre constructeur d'expressions régulières.

En prenant en considération les points (1) et (2), un exemple serait:

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



Il y a deux façons de comparer la casse:

  1. Convertissez les chaînes en majuscules et comparez-les en utilisant l'opérateur strict (===). Comment l'opérateur strict traite les opérandes: http://www.thesstech.com/javascript/relational-logical-operators
  2. Correspondance de modèle à l'aide de méthodes de chaîne:

Utilisez la méthode de chaîne "search" pour une recherche insensible à la casse. Lisez à propos de la recherche et d'autres méthodes de chaîne à: 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>

4
2018-06-23 11:11