[JAVASCRIPT] textareas / validation de forms, AIDE!!!

textareas / validation de forms, AIDE!!! [JAVASCRIPT] - Programmation

Marsh Posté le 11-09-2001 à 15:11:59    

salut à vous,
je veux faire quatre fonctions js:
 
- isEntier
- isFlottant
- isUnedate
- isTexte
- isMail
 
j'aimerai bien en fait le faire par cette technique:
 
- isEntier: je convertis la chaine passée en ENTIER puis en CHAINE et je compare l'entrée à la sortie
 
- isFlottant: je convertis la chaine passée en FLOTTANT puis en CHAINE et je compare ...
 
- isUnedate: comment faire le plus simple possible??
 
- isTexte: je m'en fous ;)
 
donc 2 QUESTIONS :  
-     comment on reconverti en chaine de char un entier ou flottant ou date ???
 
-     comment on fait pour tester la validité d'une date rentrée et si possible la remettre en JJ/MM/AAAA ????
 
voila merci bokoo pour votre aide qui j'espère servira à bcp de monde :)

 

[edtdd]--Message édité par k666--[/edtdd]

Reply

Marsh Posté le 11-09-2001 à 15:11:59   

Reply

Marsh Posté le 11-09-2001 à 16:25:50    

"comment on reconverti en chaine de char un entier ou flottant ou date ??? "
 
Si i est un entier ou un float,
<>
chaine=i+"";
<>
 
"comment on fait pour tester la validité d'une date rentrée et si possible la remettre en JJ/MM/AAAA ???? "
 
Bah la ca depends du format d'entree de ta date ... ??
 
voili voila :)

Reply

Marsh Posté le 11-09-2001 à 17:22:09    

merci bien mon cher ami :)
c la fin du monde, mais c pas la fin du javascript qd mêê ;)
et pour les dates, ya pas des fonctions préfaties déjà qui puissent dire si la date est valide, en lui passant un autre paramètre du style 'type de date' ???????
merci :)

Reply

Marsh Posté le 12-09-2001 à 08:49:46    

Pas a ma conniassance ... mais comme dirait l'autre : "On se sort les doigts du cul et on se motive !" ... meme si les evenements actuel ne sont pas tres motivant :(

Reply

Marsh Posté le 12-09-2001 à 09:41:59    

fais toujours un tour ici pour les dates
 
http://www.w3schools.com/js/js_datetime.asp

Reply

Marsh Posté le 12-09-2001 à 13:06:15    

j'ai fait un truc pourrave,
ça marche que pour les input type text car les checkboxs et radio ont leurs propres règles
on peut indiquer: le nom du champ, la description, le type de variables, le requis/pas requis
 
à qui n'en veuille:
voilà le code à inclure:

Code :
  1. function isEntier(koi)
  2. {
  3. var tmp = koi;
  4. if ( ( tmp != "" )  && ( tmp != null ) )
  5. {
  6. tmp = parseInt(tmp);
  7. tmp = tmp + "";
  8. if ( ( tmp == koi )||( ("0"+tmp) == koi ) )
  9.  return 1;
  10. else
  11.  return 0;
  12. }
  13. else return -1;
  14. }
  15. function isFlottant(koi)
  16. {
  17. var tmp = koi;
  18. if ( ( tmp != "" )  && ( tmp != null ) )
  19. {
  20. tmp = parseFloat(tmp);
  21. tmp = tmp + "";
  22. if (tmp == koi)
  23.  return 1;
  24. else
  25.  return 0;
  26. }
  27. else return -1;
  28. }
  29. function isUnedate(koi)
  30. {
  31. var tmp = koi;
  32. var aze = 0;
  33. if ( ( tmp != "" ) && ( tmp != null ) )
  34. {
  35. var tmp = koi.split("/" );
  36. if ( tmp.length == 3 )
  37.  {
  38.  for (k = 0; k < 3; k ++)
  39.   {
  40.   if (isEntier(tmp[k]) == 1)
  41.    {aze++;};
  42.   };
  43.  return((aze == 3) ? 1:0);
  44.  };
  45. else return 0;
  46. }
  47. else return -1;
  48. }
  49. function isTexte(koi)
  50. {
  51. var tmp = koi;
  52. if ( ( tmp != "" )  && ( tmp != null ) )
  53. return 1;
  54. else
  55. return -1;
  56. }
  57. function check_up(what)
  58. {
  59. var datz = what.split("," );
  60. var erreurz = "";
  61. tmpz = new Array(4);
  62. for(i=0;i<datz.length;i++)
  63. {
  64. tmpz = datz[i].split("|" );
  65. if(tmpz.length == 5)
  66.  {
  67.  switch(tmpz[4])
  68.   {
  69.   case "c":
  70.     alert("checkbox" );
  71.     break;
  72.   case "r":
  73.     alert("radio" );
  74.     break;
  75.   default :
  76.     contenu_actuel = document.forms[form_name].elements[tmpz[0]].value;
  77.     description = tmpz[1];
  78.     requis = tmpz[2];
  79.     type_data = tmpz[3];
  80.     if (requis=="1" )
  81.      {
  82.      switch(type_data)
  83.       {
  84.       case "i":
  85.        switch(isEntier(contenu_actuel))
  86.         {
  87.         case -1: erreurz = erreurz + "\nle champ " + description + " n'a pas été renseigné ...";break;
  88.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  89.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  90.         };
  91.        break;
  92.       case "f":
  93.        switch(isFlottant(contenu_actuel))
  94.         {
  95.         case -1: erreurz = erreurz + "\nle champ " + description + " n'a pas été renseigné ...";break;
  96.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  97.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  98.         };
  99.        break;
  100.       case "d":
  101.        switch(isUnedate(contenu_actuel))
  102.         {
  103.         case -1: erreurz = erreurz + "\nle champ " + description + " n'a pas été renseigné ...";break;
  104.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  105.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  106.         };
  107.        break;
  108.       default:
  109.        switch(isTexte(contenu_actuel))
  110.         {
  111.         case -1: erreurz = erreurz + "\nle champ " + description + " n'a pas été renseigné ...";break;
  112.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  113.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  114.         };
  115.       }
  116.      }
  117.     else
  118.      {
  119.      switch(type_data)
  120.       {
  121.       case "i":
  122.        switch(isEntier(contenu_actuel))
  123.         {
  124.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  125.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  126.         };
  127.        break;
  128.       case "f":
  129.        switch(isFlottant(contenu_actuel))
  130.         {
  131.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  132.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  133.         };
  134.        break;
  135.       case "d":
  136.        switch(isUnedate(contenu_actuel))
  137.         {
  138.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  139.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  140.         };
  141.        break;
  142.       default:
  143.        switch(isTexte(contenu_actuel))
  144.         {
  145.         case 0 : erreurz = erreurz + "\nle champ " + description + " n'a pas le bon format ...";break;
  146.         //case 1 : erreurz = erreurz + "\nle champ " + description + " est bien rempli ...";break;
  147.         };
  148.       }
  149.      }
  150.   }
  151.  }
  152. }
  153. if ( erreurz == "" )
  154. {
  155. document.forms[formulaire].submit();
  156. }
  157. else
  158. {
  159. alert(erreurz);
  160. erreurz = "";
  161. }
  162. }


 
et dans la page des formulaires, fo mettre:
 

Code :
  1. <html>
  2. <body>
  3.  <script src="valideur.js"></script>
  4.  <script language="javascript">
  5.  //model de validation: ( nom_du_champ|desc_du_champ|requis:1_pasrequis:0|type_float:f_charz:c_int:i_d:date ,...|type_de_champ_t:text_c:checkbox_r:radio...)
  6.  var fields_toCheck = "kakz|champ sympa|1|t|x,kakz2|champ sympa|1|i|x,kakz3|champ sympa|1|d|x";
  7.  var form_name = "formulaire";
  8.  </script>
  9. <form name=formulaire onsubmit="javascript:check_up(fields_toCheck);return false;">
  10. <input type=text name=kakz value="">texte<br>
  11. <input type=text name=kakz2 value="">numméro<br>
  12. <input type=text name=kakz3 value="">date<br>
  13. <input type=submit value=ok>
  14. </form>
  15. <script>
  16. //check_up(chaine);
  17. //alert(erreurz);
  18. </script>
  19. </body>
  20. </html>


 
voilà, salut

 

[edtdd]--Message édité par k666--[/edtdd]

Reply

Marsh Posté le 17-09-2001 à 09:00:40    

up pour tous les flémards ;)
j'ai rajouté isMail()
je posterai staprème ;)

Reply

Marsh Posté le 17-09-2001 à 12:13:53    

Une autre façon de procéder avec les expressions régulières :
 
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="Javascript">
 
function isEntier()
{
 var tmp;
 tmp = prompt('Test Entier');
 p = /^([\d]+)$/
 if(resultat = tmp.match(p))
 {
  document.write("La chaîne est un entier" );
 }
 else
 {
  document.write("La chaîne n'est pas un entier" );
 }
}
 
function isFlottant()
{
 var tmp;
 tmp = prompt('Test Flottant');
 p = /^([\d]+)(,|.)([\d]+)$/
 if(resultat = tmp.match(p))
 {
  document.write("La chaîne est un flottant" );
 }
 else
 {
  document.write("La chaîne n'est pas un flottant" );
 }
}
 
function isTexte()
{
 var tmp;
 tmp = prompt('Test Texte');
 p = /([a-zA-Z0-9]+)/
 if(resultat = tmp.match(p))
 {
  document.write("La chaîne est un texte" );
 }
 else
 {
  document.write("La chaîne n'est pas un texte" );
 }
}
 
function isDate()
{
 var tmp;
 tmp = prompt('Test une date de la forme d/m/y ou d-m-y');
 p = /^(([0-2]?[0-9])|(30|31))(\/|-)(([0]?[0-9])|(10|11|12))(\/|-)(([0-9]{4})|([0-9]{2}))$/
 if(resultat = tmp.match(p))
 {
  document.write("La chaîne est une date" );
 }
 else
 {
  document.write("La chaîne n'est pas une date" );
 }
}
 
function isMail()
{
 var tmp;
 tmp = prompt('Test email');
 p = /^([^\s]+)@([^\s]+).(com|net|fr|org|prout)$/
 if(resultat = tmp.match(p))
 {
  document.write("La chaîne est une adresse email" );
 }
 else
 {
  document.write("La chaîne n'est pas une adresse email" );
 }
}
 
</script>
<link rel="stylesheet" type="text/css" href="nav.css">
</head>
<body bgcolor="#FFFFFF">
   <a href="javascript:isTexte()";> Tester un texte (tout sauf vide)</a><br><br>
   <a href="javascript:isEntier()";> Tester un entier (bha un entier quoi)</a><br><br>
   <a href="javascript:isFlottant()";> Tester un flottant (séparateur , ou .)</a><br><br>
   <a href="javascript:isDate()";> Tester une date (jour-mois-année -> séparateur / ou -)</a><br><br>
   <a href="javascript:isMail()";> Tester une adresse Email </a><br><br>
</body>
</html>
 
J'adore les RegEXP....

Reply

Marsh Posté le 18-09-2001 à 00:46:46    

fly lm a écrit a écrit :

p = /^(([0-2]?[0-9])|(30|31))(\/|-)(([0]?[0-9])|(10|11|12))(\/|-)(([0-9]{4})|([0-9]{2}))$/




 
etc....?
comment ça marche ce truc? t'as pas une doc sur la définition des regExp en JS ???
c cool c assez propre ton truc donc ça me plairait d'en voir :)
voilà merci et  :) vive la fin du monde :)

Reply

Marsh Posté le 18-09-2001 à 09:56:31    

C'est très simple quand tu as compris le truc. Je vais essayer de t'expliquer :
 
Voici le motif (pattern) que tu vas tenter de reconnaître avec match(p)
 
p = /^(([0-2]?[0-9])|(30|31))(\/|-)(([0]?[0-9])|(10|11|12))(\/|-)(([0-9]{4})|([0-9]{2}))$/
 
----------
 
Ton motif se trouve entre / et /
Le ^ correspond au début de ta chaîne, le $ à la fin. Ils ne sont pas toujours nécessaires, tout dépend de ce que tu cherches à reconnaître.
Les [] permettent de définir les caractères autorisés à un endroit donné de la chaîne en précisant des intervalles.
 
exemple :  
[a-z] autorise [abcdef....rstuvwxyz]
[0-9] autorise [0123456789]
 
Les accolades {} précise le nombre de foi ou les caractères autorisés peuvent se répéter.
 
exemple :
[0-9]{4} reconnait 2000 mais pas 350
[0-9]{2} va reconnaitre 20 mais pas 350 ni 1 ou 2000...
Mais tu peux encore compliquer...
 
le ? veut dire que le caractère qui précède est répété au plus une fois, ce qui le rend facultatif.
 
exemple :
[0-2]?[0-9] sera à même de reconnaitre 01,02,...,09,...,5,11,23... mais pas 40.
 
Je te donne des liens qui te donnerons quelques règles pour utiliser les REGEXP, car c'est très long à expliquer (et cela peut changer suivant les moteurs de REGEXP).
 
En gros, voilà quelques adresses sympas (même si c'est pas du JS) qui t'aiderons à comprendre :
 
http://developpeur.journaldunet.co [...] preg.shtml
http://www.phpinfo.net/?p=articles&rub=regex
http://www.delorie.com/gnu/docs/rx/rx_toc.html
 
Bonne continuation

Reply

Marsh Posté le 18-09-2001 à 09:56:31   

Reply

Marsh Posté le 18-09-2001 à 09:59:40    

Ah oui,  
 
p = /^(([0-2]?[0-9])|(30|31))(\/|-)(([0]?[0-9])|(10|11|12))(\/|-)(([0-9]{4})|([0-9]{2}))$/
 
correspond à :
 
p = /^(JOUR compris entre 0 et 31)séparé par( / ou - )(MOIS compris entre 0 et 12)séparé par( / ou - )(ANNEE en 2 ou 4 chiffres)$/

 

[edtdd]--Message édité par fly lm--[/edtdd]

Reply

Marsh Posté le 18-09-2001 à 11:10:18    

tu peux directement creer un object Date a partir d'une chaine, et tester ensuite si c'est une date valide. Ca t'evite tes 400.000 lignes inutiles. Ca marche avec tous les object JS (si y'a pas un constructeur qui prend une string, y'a String.parseXXX) ... par exemple, le code complet pour tester un entier et une date a partir d'une string (c'est quand meme largement plus simple) :
 
<HTML>
<HEAD>
 
<SCRIPT LANGUAGE="JavaScript">
 
function checkNumber(name)
{
 var i = parseInt(document.all[name].value);
 var result = "Text is a valid number";
 
 if(isNaN(i))
  result = "Text is not a valid number";
 
 alert(result);
}
 
function checkDate(name)
{
 var date = new Date(document.all[name].value);
 var result = "Text is a valid date";
 
 if(isNaN(date))
  result = "Text is not a valid date";
 alert(date);
}
 
</SCRIPT>
</HEAD>
<BODY>
<h2>Validity test for number (int)</h2>
<INPUT NAME="number" TYPE="TEXT" OnChange="checkNumber('number')">
<h2>Validity test for date (MM/DD/YYYY)</h2>
<INPUT NAME="date" TYPE="TEXT" OnChange="checkDate('date')">
</BODY>
</HTML>

 

[edtdd]--Message édité par Gonzoide--[/edtdd]

Reply

Marsh Posté le 18-09-2001 à 11:24:00    

Oui...c'est sur, même si dans l'objet date sera pas aussi souple qu'une REGEXP... Mais j'avoue que cela ne m'étais pas venu à l'idée... Pourquoi faire compliquer quand on peut faire simple...

Reply

Marsh Posté le 18-09-2001 à 11:33:58    

Pas aussi souple ? Le parser integre dans "Date" te permet de prendre directement les Strings de la forme "xx/xx/2001" ou "20 sept 2001", etc etc (tout ce qui ressemble a une date bien formee est accepte)

Reply

Marsh Posté le 18-09-2001 à 11:47:50    

Gonzoide a écrit a écrit :

Pas aussi souple ? Le parser integre dans "Date" te permet de prendre directement les Strings de la forme "xx/xx/2001" ou "20 sept 2001", etc etc (tout ce qui ressemble a une date bien formee est accepte)  




 
Autant pour moi... Par contre il valide des dates du genre : 99/18/2000 ????? -> pour lui c'est ok

Reply

Marsh Posté le 19-09-2001 à 15:10:00    

supers les liens merci bokoo à vous :)  
je vais les lire bientôt, car je suis maintenant au  :jap: chômmage :jap:  
 
 :love: fin du monde rulez :love:
 
ah ou, dans la version non innovante, bah la fonction isMail pourrave est ci dessous, ça marche néanmoins un peu :
 

Code :
  1. function isMail(koi)
  2. {
  3. var tmp = koi;
  4. if ( ( tmp != "" )  && ( tmp != null ) )
  5. {
  6. if ( (tmp.indexOf("@" ) == tmp.lastIndexOf("@" )) && (tmp.indexOf("@" ) > 1) )
  7.  {
  8.  if ( (tmp.lastIndexOf("." ) > tmp.lastIndexOf("@" )) && (tmp.lastIndexOf("." ) < (tmp.length - 2)) ) return 1;
  9.  else return 0;
  10.  }
  11. else return 0;
  12. }
  13. else return -1;
  14. }

 

[edtdd]--Message édité par k666--[/edtdd]

Reply

Marsh Posté le 19-09-2001 à 15:24:41    

Si mon adresse c'est : a@toto.com, ben ca marche pas :)

Reply

Marsh Posté le 19-09-2001 à 16:01:15    

bahnon.... :( c vrai  :sweat:  
allez,  :fou: viré!!!! :fou:  
 
 
 :lol:  :lol:  
 
bin en fait je "crois" que la syntax adresses mail prévoit quiaie au moins 3 charactères à gauche de l'arrobase, ou truc du genre ????
ché plus

 

[edtdd]--Message édité par k666--[/edtdd]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed