J'ai ce qui suit:
if (referrer.indexOf("Ral") == -1) { ... }
Ce que je veux faire est de rendre Ral
insensible à la casse, de sorte qu'il puisse être RAl
, rAl
etc. et toujours correspondre.
Y a-t-il un moyen de dire que cela Ral
doit être insensible à la casse?
RegExp
directe d'une entrée utilisateur. Par exemple, un utilisateur pourrait entrer*
et une erreur serait lancée dans leRegExp
constructeur. La solution acceptée n'a pas ce problème.Réponses:
Ajouter
.toLowerCase()
aprèsreferrer
. Cette méthode transforme la chaîne en une chaîne minuscule. Ensuite, utilisez.indexOf()
à laral
place deRal
.La même chose peut également être obtenue en utilisant une expression régulière (particulièrement utile lorsque vous souhaitez tester des modèles dynamiques):
la source
toLocaleLowerCase()
( ref ).search
:var index = referrer.search(/Ral/i);
Une autre option consiste à utiliser la méthode de recherche comme suit:
Il semble plus élégant que de convertir la chaîne entière en minuscules et il peut être plus efficace.
Avec
toLowerCase()
le code, deux passes sur la chaîne, une passe sur toute la chaîne pour la convertir en minuscules et une autre pour rechercher l'index souhaité.Avec
RegExp
le code, passez une passe sur la chaîne qui semble correspondre à l'index souhaité.Par conséquent, sur les chaînes longues, je recommande d'utiliser la
RegExp
version (je suppose que sur les chaînes courtes, cette efficacité vient du fait de la création de l'RegExp
objet)la source
Utilisez un RegExp:
Ou utilisez
.toLowerCase()
:la source
Depuis ES2016, vous pouvez également utiliser une méthode légèrement meilleure / plus facile / plus élégante (sensible à la casse):
ou (insensible à la casse):
Voici une comparaison de
.indexOf()
et.includes()
: https://dev.to/adroitcoder/includes-vs-indexof-in-javascriptla source
includes
est sensible à la casse dans Chrome: essayez'fooBar'.includes('bar')
==>false
Il y a quelques approches ici.
Si vous souhaitez effectuer une vérification insensible à la casse pour cette instance uniquement, procédez comme suit.
Alternativement, si vous effectuez cette vérification régulièrement, vous pouvez ajouter une nouvelle
indexOf()
méthode similaire àString
, mais la rendre insensible à la casse.la source
defineProperty
, je suggèreObject.defineProperty(String.prototype, 'indexOfInsensitive', {value: function(s,b){return this.toLowerCase().indexOf((s+'').toLowerCase(),b);}});
. Deux mises à jour: conversion de chaîne explicite utilisant(s+'')
et non énumérable dans une boucle (for(var i in '') ...
ne s'affiche pasindexOfInsensitive
.la source
Vous pouvez essayer ceci
la source
Exemple pour n'importe quelle langue:
la source
Nous sommes en 2016, et il n'y a pas de moyen clair de procéder? J'espérais un peu de copypasta. Je vais essayer.
Notes de conception: je voulais minimiser l'utilisation de la mémoire, et donc améliorer la vitesse - il n'y a donc pas de copie / mutation des chaînes. Je suppose que le V8 (et d'autres moteurs) peut optimiser cette fonction.
Ma raison pour le nom:
Pourquoi pas...:
toLowerCase()
- appels répétés potentiels à toLowerCase sur la même chaîne.RegExp
- maladroit pour rechercher avec variable. Même l'objet RegExp est maladroit d'avoir à échapper des caractèresla source
Pour effectuer une meilleure recherche, utilisez le code suivant,
Dans la première alerte (), JavaScript a renvoyé "-1" - en d'autres termes, indexOf () n'a pas trouvé de correspondance: c'est simplement parce que "JavaScript" est en minuscules dans la première chaîne et correctement capitalisé dans la seconde. Pour effectuer des recherches non sensibles à la casse avec indexOf (), vous pouvez rendre les deux chaînes en majuscules ou en minuscules. Cela signifie que, comme dans la deuxième alerte (), JavaScript ne vérifiera que l'occurrence de la chaîne que vous recherchez, la capitalisation ignorée.
Référence, http://freewebdesigntutorials.com/javaScriptTutorials/jsStringObject/indexOfMethod.htm
la source
Si
referrer
est un tableau, vous pouvez utiliserfindIndex()
la source
Voici mon point de vue:
Script :
HTML:
Codepen
la source