Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

alex.hitman

[javascript] problème avec la regex search

Messages recommandés

Bonjour, j'ai un problème avec une regex dans mon code javascript, c'est search.

 

Je lui demande en fait de chercher des caractères dans un textarea toute les x millisecondes, et s'il les trouve, une variable change. Mais, la recherche ne se fait que sur le premier caractère, et que pour la lettre é. Et ça, je ne veux pas.

 

Voici le bout de code qui pose problème :

 

valeur=document.getElementById('montextarea').value;
if (valeur.search(/é|è|à|ù/) != -1)
   {
     nbre=nbre+8;
   }
   if (valeur.search(/ê|â|û|î/) != -1)
   {
     nbre=nbre+7;
   }
   if (valeur.search(/ë|ä|ü|ö|ï|"/) != -1)
   {
     nbre=nbre+6;
   }

 

Savez-vous ce que je dois faire ?

 

Merci d'avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai aussi exxayé comme ceci :

 

if ((valeur.indexOf("é") != -1)||(valeur.indexOf("è") != -1)||(valeur.indexOf("à") != -1)||(valeur.indexOf("ù") != -1))
   {
     nbre=nbre+7;
   }

 

Mais c'est le même résultat.

Partager ce message


Lien à poster
Partager sur d’autres sites

Quel est l'encoding utilisé par ton document ?

Quel est l'encoding utilisé par ceux qui vont remplir ton formulaire ? (eh oui, si tu as codé ta page avec des "é" en UTF-8 et que ton formulaire reçoit un "é" codé en ISO8859-1, y'a aucune chance pour que la recherche trouve quoi que ce soit)

 

A part ces problèmes potentiels, il me semble qu'avec une regexp si on cherche un caractère parmi plusieurs il convient d'utiliser la notation [abcdef] et non a|b|c|d|e|f ... De mémoire....

Et puis il me semble que j'utilisais maChaine.match(/[abcdef]/) au lieu de search(). Cela dit, match() retourne un booléen, donc pour les tests c'est plus intuitif....

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de ta réponse.

 

Effectivement, cela peut venir du codage. Je n'y avais pas pensé.

Pour les a|b|c je ne sais effectivement pas d'où je sors les | !

 

Mais bon j'avais même essayé avec une regexp pour chaque caractère, et ça ne fonctionnait pas.

 

Pour que les é soient codés en é quel est le codage que je dois utiliser ?

 

 

Aussi, y-a-t'il un avantage à utiliser un codage plutôt que l'autre ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Pour que les é soient codés en é quel est le codage que je dois utiliser ?
C'est à dire ?

Les codes "é" pour remplacer des caractères spéciaux, c'est dans la norme HTML. Le seul endroit où tu peux les trouver, c'est dans la source de la page, pour remplacer un caractère "brut" histoire d'être certain que le navigateur affichera bien le bon caractère. Lorsque tu testes des champs, tu reçois des caractères uniques, codés dans la langue / l'encodage en action sur la machine qui fait tourner le navigateur.

Aussi, y-a-t'il un avantage à utiliser un codage plutôt que l'autre ?
Ces histoires d'encodage ne posent problème que lorsque l'on a affaire à une page contenant des caractères appartenant strictement à une langue autre que celle en vigueur sur le poste sur lequel on se trouve. Si les pages de codes sont différentes, l'affichage contiendra des choses bizarres. Le simple fait de préciser l'encodage peut régler ce problème, sauf si des personnes susceptibles de ne pas avoir ces encodages dans leurs fontes (russes, chinois, etc.) viennent consulter ton texte. C'est là que l'UTF-8 vient sauver la mise : cet encodage contient tous les caractères de tous les langages existants (et il reste encore plein de place pour d'autres ;-)) et c'est un standard international (ok, c'est une subdivision de l'UNICODE qui, lui, est un standard international).

A côté de cela, il n'y a pas d'encodage "meilleur" qu'un autre.

Partager ce message


Lien à poster
Partager sur d’autres sites
Pour les a|b|c je ne sais effectivement pas d'où je sors les | !
Les | sont utilisés dans de nombreux autres langages pour exprimer le "OU" (binaire ou logique). En ce qui concerne les RegExp il s'agit du caractère représentant une alternative. Si la chaine testée ne vérifie pas la première partie de l'alternative, c'est la suivante qui est prise en compte.

Exemple : ^[0-8][0-9]$|^90$

Cette RegExp vérifie toute chaine contenant un nombre à deux chiffres compris entre 00 et 90 (inclus)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de ta réponse, mais en fait je ne sais toujours pas pourquoi j'ai mis "|" pour faire "ou", car en général (en php etc...) il en faut 2 "||" !

 

Je vais essayer de re-faire cette regexp alors.

 

Merci

Modifié par alex.hitman

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×