web-dev-qa-db-fra.com

javascript compare les chaînes sans être sensible à la casse

Je dois vérifier certaines chaînes en utilisant JavaScript, mais la sensibilité à la casse pose des problèmes. par exemple

if('abc'=='ABC')
{
return true;
}

il n'entrera pas dans la boucle if bien que la signification de la Parole soit la même. Je ne peux pas utiliser la clause tolower aussi, car je ne connais pas les données.

if('aBc'=='abC')
{
return true;
}

comment écrire la fonction JS pour cela si cela pouvait être fait par jquery.

60
ankur

Vous pouvez placer les deux arguments en minuscule et ainsi vous obtiendrez toujours une recherche insensible à la casse.

var string1 = "aBc";
var string2 = "AbC";

if (string1.toLowerCase() === string2.toLowerCase())
{
    #stuff
}
116
Gazler

Une autre méthode utilisant une expression régulière (c'est plus correct que la réponse de Zachary):

var string1 = 'someText',
    string2 = 'SometexT',
    regex = new RegExp('^' + string1 + '$', 'i');

if (regex.test(string2)) {
    return true;
}

RegExp.test () retournera vrai ou faux.

De plus, en ajoutant le début de la chaîne '^' (au début de la chaîne) et la fin de la chaîne '$' (à la fin de la chaîne), assurez-vous que votre expression régulière ne correspondra que si 'sometext' est le seul texte dans stringToTest. Si vous recherchez un texte contenant l'expression régulière, vous pouvez le laisser.

Il serait peut-être plus simple d’utiliser la méthode string.toLowerCase ().

Alors ... les expressions régulières sont puissantes, mais vous ne devriez les utiliser que si vous comprenez comment elles fonctionnent. Des choses inattendues peuvent arriver lorsque vous utilisez quelque chose que vous ne comprenez pas.

Il existe des tonnes de "tutoriels" d'expressions régulières, mais la plupart semblent essayer de pousser un certain produit. Voici à quoi ressemble un bon tutoriel ... d'accord, c'est écrit pour utiliser php, mais sinon, il semble s'agir d'un bon tutoriel pour débutant: http://weblogtoolscollection.com/regex/regex.php

Cela semble être un bon outil pour tester les expressions régulières: http://gskinner.com/RegExr/

18
Akrikos

Vous pouvez également utiliser string.match ().

var string1 = "aBc";
var match = string1.match(/AbC/i);

if(match) {
}
9
Zachary

Essaye ça...

if(string1.toLowerCase() == string2.toLowerCase()){
    return true;
}

En outre, ce n'est pas une boucle, c'est un bloc de code. Les boucles sont généralement répétées (bien qu’elles ne puissent éventuellement s’exécuter qu’une seule fois), alors qu’un bloc de code ne se répète jamais.

J'ai lu votre note sur l'utilisation de toLowerCase, mais je ne vois pas pourquoi ce serait un problème.

4
belugabob