2010-11-10 7 views
1

J'ai un script sur lequel je travaille que je suis un peu perdu.javascript recherche chaîne pour l'expression

Je saisis une entrée utilisateur (à l'aide de jQuery), puis fais une boucle dans un tableau pour voir si une phrase du tableau existe dans l'entrée utilisateur. Si elle est trouvée, j'ouvre une boîte d'alerte en leur disant qu'elle a été trouvée. Mais pour une raison quelconque, il ne fonctionne pas.

code:

submit = false; 

      for(i in keyphrases_array) { 
       if(english_text.indexOf(keyphrases_array[i]) != -1) { 
        if(trans_text.indexOf(keyphrases_array[i]) != -1) { 
         submit = false; 
        } 
       } else { 
        submit = true; 
       } 
      } 

keyphrases_array est un tableau global qui est défini dans une autre fonction.

Exemple:

Si dans mon tableau, j'ai l'expression « Bonjour tout le monde » et mon script trouve Bonjour tout le monde dans la variable english_text il vérifie alors l'utilisateur texte soumis (trans_text). Si la phrase n'est pas trouvée dans trans_text alors le script devrait retourner false.

+0

Vous devrez peut-être afficher plus de code. –

+0

Quel comportement obtenez-vous? Aussi: votre indexOf vérifie si le texte est dans la chaîne et s'il est 'submit = false'. Sur la base de votre question, cependant, il semble que vous devriez retourner «vrai» là-bas? –

Répondre

3

D'abord, vous ne devriez pas utiliser for/in itérer sur un tableau. Utilisez une simple boucle for.

Le problème est probablement que la valeur de submit est remplacée par l'itération suivante dans la boucle. Si c'est la fin de la fonction, vous devriez revenir immédiatement.

submit = false; 

for(var i = 0; i < keyphrases_array.length; i++) { 
    if(english_text.indexOf(keyphrases_array[i]) != -1) { 
      if(trans_text.indexOf(keyphrases_array[i]) != -1) { 
        // return immediately 
       return false; 
      } 
    } else { 
      submit = true; 
    } 
} 
return submit; 

ou s'il doit y avoir plus de traitement, il vous suffit de briser la boucle:

submit = false; 

for(var i = 0; i < keyphrases_array.length; i++) { 
    if(english_text.indexOf(keyphrases_array[i]) != -1) { 
      if(trans_text.indexOf(keyphrases_array[i]) != -1) { 
       submit = false; 
       break; 
      } 
    } else { 
      submit = true; 
    } 
} 

EDIT: Sur la base de vos commentaires, il semble que vous voulez return false si le texte est et non trouvé dans trans_text. Cela signifierait que le test devrait utiliser == au lieu de !=.

 if(trans_text.indexOf(keyphrases_array[i]) == -1) { 
       // return immediately 
      return false; 
     } 
+0

Merci beaucoup pour votre aide! Cela a résolu mon problème – dennismonsewicz

+0

@dennismonsewicz - De rien. : o) – user113716

1

Le code précédent retournerait vrai si le texte était seulement dans la version anglaise, vous devez seulement passer vrai si c'est dans les deux. - Ai-je bien compris?

submit = false; 

       for(i in keyphrases_array) { 
        if(english_text.indexOf(keyphrases_array[i]) != -1 && trans_text.indexOf(keyphrases_array[i]) != -1) { 
          submit = true; 
         } 
        } else { 
         submit = false; 
        } 
       } 

EDIT: Switched true/false autour pour correspondre à la question

+0

le script recherche d'abord l'anglais et s'il trouve la phrase, il doit alors rechercher le texte traduit. Si le texte traduit ne contient pas la phrase, il doit retourner false. J'ai certaines phrases clés qui ne peuvent pas être traduites. Ainsi ce script a donné naissance lol ... Merci pour l'aide jusqu'ici! – dennismonsewicz

+0

Je pense que patrick dw l'a fait trier pour vous. – dpmguise