2010-07-20 13 views
2

que je fais un test de correspondance de chaîne assez basique comme suit:Javascript, chaîne: chaîne de test pour la présence de sous-chaîne qui comprend un astérisque (*)

if(msList.indexOf(textChoice) != -1) 

Cela fonctionne bien sauf que de temps en temps la sous-chaîne que je cherche (textChoice) se termine par un astérisque. Ensuite, je finis par obtenir des fausses correspondances parce que l'astérisque dans la chaîne est interprété comme un opérateur, pas un caractère dans la chaîne.

Alors, comment puis-je faire ce test afin que tous les astérisques de la sous-chaîne soient traités comme des caractères normaux?

PS. Je sais que la réponse simple est "N'incluez pas d'astérisques dans votre sous-chaîne" mais ils sont dans les données avec lesquelles je travaille - je ne peux pas m'en débarrasser.

+3

Pouvez-vous poster un exemple du code qui ne fonctionne pas? La fonction 'indexOf' devrait toujours traiter un astérisque comme un caractère normal. – LukeH

+0

Merci, je pense que j'ai mal diagnostiqué le problème. Je l'ai résolu d'une autre manière. Merci quand même! – monotasker

Répondre

3

Tous les caractères de la sous-chaîne seront traités comme des caractères normaux. * n'est pas un opérateur spécial et ne modifie en rien le comportement de indexOf. De plus, la méthode indexOf ne doit jamais renvoyer false. Il retournera:

  • -1 si aucune correspondance n'a été trouvée ou
  • index à partir de sous-chaîne correspondant si trouvé

Notez que l'indice de départ peut être 0 qui ne correspond pas à false pour substring recherche . Cela signifie simplement que la sous-chaîne a été trouvée au début de la chaîne.

"ABC".indexOf("AB") // 0 

Mettre des contrôles explicites comparant la valeur de retour avec -1 au lieu de simplement vérifier pour une valeur truthy.

if("ABC".indexOf("AB")) { 
    // will never execute 
} 

, font toujours ce lieu:

if("ABC".indexOf("AB") != -1) { 
    // .. 
} 
+0

Merci. Je pense que j'ai mal compris où était le problème. J'ai été capable de le réparer d'une autre manière. J'apprécie votre aide, cependant. Cela m'a remis sur la bonne voie. – monotasker