Probléme de validation javascript sur firefox

cs_des3er Messages postés 1 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 13 décembre 2008 - 13 déc. 2008 à 00:11
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 15 déc. 2008 à 18:14
Bonjour,

J'ai un petit soucis je suis entrain de validé un formulaire simple
en test pour ensuite l'implémenter dans mon site web, je programme en
javascript (débutant) et je suis confronté au problème suivant

je test le nom, un montant, et un mail si ils ont vide j'ai un
popup pas de problème, par contre si je teste l'expression régulière en
plus, si exemple je met un nom je teste la validité (alphabétique) ça
me revoit true si c bon et false si c pas bon, même chose pour montant,
et le mail, tout fonctionne à merveille sauf quand je clique sur
valider des fois si j'ai du caractèrs dans le champ nom ça me ré
affiche le popup veuillez entrer des caractères alors que j'ai bien des
cartères dans mon champ on dirai que firefox reprends les ancien
message

voici mon code java

function verification(formulaire)

{

if(document.getElementById('nom').value == "")

{

alert ("Vous avez oublié de saisir le champ nom!!!!");

return false;

}

if( ! IsAlpha(document.getElementById('nom').value) )

{

alert ("Vous devez entrer des caractères !!!!");

return false;

}

if(document.getElementById('montant').value == "")

{

alert ("Vous avez oublié de saisir le champ montant!!!!");

return false;

}

if(IsNumeric(document.getElementById('montant').value) == false)

{

alert ("Vous devez entrer un montant!!!!");

return false;

}

if(document.getElementById('mail').value == "")

{

alert ("Vous avez oublié de saisir un mail!!!!");

return false;

}

if(IsMail(document.getElementById('mail').value) == false)

{

alert ("Vous devez entrer un mail valide!!!!");

return false;

}

return true;

}

function IsAlpha(Txt)

{

var regExpression= /^[a-zA-Z-éèêëùç]*$/gi;

var result = regExpression.test(Txt);

return result;

}

function IsNumeric(Num)

{

var regExpression= /^[0-9]*$/gi;

var result = regExpression.test(Num);

return result;

}

function IsMail(Mail)

{

var regExpression=
/^[a-zA-Z0-9_}{+\-_]+(\.[a-zA-Z0-9_}{+\-_]+)*@[a-zA-Z0-9\-\.]*[a-zA-Z0-9](\.[a-zA-Z0-9\.\-]*[a-zA-Z0-9\.])*[\.][a-zA-Z]{2,4}$/;

var result = regExpression.test(Mail);

return result;

}

formulaire html

<html>

<head>

<meta http-equiv="Pragma" content="no-cache">

<SCRIPT LANGUAGE="javascript" SRC="verif.js"></script>

</head>



<form action='page.html' method='post' onsubmit='return verification(this);'>

Nom:


Montant:

Email



</form>



</html>

merci de vos réponses

2 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
13 déc. 2008 à 13:49
bonjour,
pas du tout contrôlé ce que tu fais.
( il existe des function qu'on appelle pas.. mais bon... )
>>sauf quand je clique sur valider des fois si j'ai du caractères dans le champ nom
euh... mais encore ?
c'est sûr qu'une erreur qui semble se produire de manière aléatoire,
c'est pas simple à cerner...
mais ici, en théorie.. soit ça marche, soit ça ne marche pas
sauf....   comme action="page.html", ça dépend de ce qu'on y fait,
            une fois le formulaire soumis
Cordialement          [mon Site] [M'écrire] Bul         
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
15 déc. 2008 à 18:14
Bonjour à tous,
Tout à fait TROUBLANT...
Si l'on
teste la chaine "AQDERTL" avec ta fonction...
FireFox retourne
alternativement true et false alors que IExplorer retourne invariablement true.
Encore plus TROUBLANT
Si l'on teste

var szTmp = "AQDERTL";
var
rExp = /^[a-zA-Z-éèêëù]*$/gi;
for( var i=0; i<10; i++){
  var Result
= rExp.test( szTmp);
  document.write( Result + ' - ');
}
on obtient le même résulat avec ces deux navigateurs
true - false - true - false - true -
false - true - false - true - false

Encore plus plus TROUBLANT ou
TROUBLANT++
Si l'on teste
var szTmp = "AQDERTL";
for( var i=0; i<10; i++){
  var rExp =
/^[a-zA-Z-éèêëù]*$/gi;
  var Result = rExp.test( szTmp);

  document.write( Result + ' - ');
}
l'expression régulière
et cette fois ci réinitialisée à chaque appel...
on obtient avec IExplorer et Safari d'ailleur...
true - true - true - true - true - true - true - true -
true - true
et avec FireFox et
Opéra d'ailleur...
true - false - true - false - true -
false - true - false - true - false
?????

Si maintenant on
utilise la forme construite de l'expression régulière à savoir
var rExp = new
RegExp("^[a-zA-Z-éèêëù]*$", "gi")
en extérieur de la boucle, soit

var szTmp = "AQDERTL";
var
rExp = new RegExp("^[a-zA-Z-éèêëù]*$", "gi")
for( var i=0; i<10; i++){

  var Result = rExp.test( szTmp);
  document.write( Result + ' - ');

}
...tous les navigateurs renvoient
true - false - true - false - true - false - true - false -
true - false
SURPRENANT NON !

et avec la forme
construite dans la boucle, soit
var szTmp = "AQDERTL";
for( var i=0; i<10; i++){
  var rExp =
new RegExp("^[a-zA-Z-éèêëùç]*$", "gi")
  var Result = rExp.test( szTmp);

  document.write( Result + ' - ');
}
...tous les navigateurs
renvoient
true - true - true -
true - true - true - true - true - true - true
BINGO c'est bon
!

Maintenant un petit jeu...
je supprime la recherche globale soit
le g, je te le donne Mimille
TOUT
est bon....avec ou sans forme construite.

Conclusion :

supprimes le g, qui soit dit en passant ne
me paraît pas justifié avec la méthode test.

Nota :
J'ai lu cela sur https://developer.mozilla.org/fr/R%c3%a9f%c3%a9rence_de_JavaScript_1.5_Core/Objets_globaux/RegExp

La notation littérale permet la compilation de
l'expression rationnelle à l'évaluation de l'expression. Utilisez cette
notation lorsque l'expression régulière restera constante. Par exemple,
si vous l'utilisez pour construire une expression rationnelle utilisée dans
une boucle, elle ne sera pas recompilée à chaque itération.

Le
constructeur de l'objet RegExp, par exemple new RegExp("ab+c"), permet de
compiler l'expression rationnelle à l'exécution. Utilisez la fonction
constructeur lorsque vous savez que le masque de l'expression rationnelle
changera, ou que vous ne le connaissez pas à l'avance et qu'il provient d'une
autre source, comme une entrée de l'utilisateur.

...je dois
admettre que mes piètres connaissances en matière d'expression régulière ont pris
une gifle...

Je finirais par deux remarques
- pourquoi faire une
recherche en ignorant la casse i, alors que tu mets a-zA-Z ?
- pourquoi si
tu prends en compte éèêëù ne prends tu pas en compte àâôö etc....

Voila en
espérant t'avoir aidé un peu à mieux comprendre ce magnifique langage.

PS: ce n'est pas qu'un BUG FireFox.
La vérité est ailleurs ! But where...
;O)
0
Rejoignez-nous