2009-12-14 6 views
0

Je souhaite vérifier que la date saisie est au format aaaa/mm/jj. Si par erreur l'utilisateur entre au format jj/mm/aaaa, il doit automatiquement convertir en aaaa/mm/jj en utilisant la fonction Javascript.Vérification du format de la date

Modifié:

function CheckDateFormat() 
{ 
    EnteredText = document.getElementById('LDate').value; 
    LengthOfText = EnteredText.length; 
    Status = true; 
    for(i=0;i<=LengthOfText;i++) 
    { 
     currentChar = EnteredText.substr(i,1); 
     if (currentChar == '/' && (i != 5 || i != 8)) 
     { 
      alert("Invalid date format"); 
      document.getElementById('LDate').focus; 
      status = false; 
     } 
     if (status == false) 
      break; 
    } 
} 
+2

C'est un Q & A du site. Ce n'est pas un site pour demander à d'autres de faire votre code pour vous. :-) –

+0

La plupart du temps, je soumets ma tentative de code. Rarement je demande une ligne d'indice. Si c'est problématique, voyez le code essayé ci-dessus. – RKh

Répondre

1

Si vos contraintes sont que les gens utiliseront AAAA/MM/JJ ou JJ/MM/AAAA alors vous pouvez l'utiliser. Comme l'a dit Gnudiff, il n'y a aucun moyen de gérer MM/DD/YYYY avec JJ/MM/AAAA. Je recommande vraiment de forcer un widget de calendrier sur la personne et ne pas leur permettre d'entrer du texte si vous pensez que cela pourrait être un problème.

function vd(s) { 
    if (!s) { 
     //Do whatever you want for an error here 
     return null; 
    } 
    //YYYY/MM/DD 
    if (s.match(/^((19|20)\d{2})\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$/)) { 
     return s; 
    } 
    //DD/MM/YYYY 
    if (s.match(/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/((19|20)\d{2})$/)) { 
     var m = /^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/((19|20)\d{2})$/.exec(s); 
     return m[3] + '/' + m[2] + '/' + m[1]; 
    } 
    //Second error here 
    return null; 
} 
0

Je pense que vous aurez besoin d'écrire une telle fonction vous-même.

La validation peut être fait en utilisant des expressions régulières:

  1. Vérifiez si l'entrée est dans le format que vous souhaitez qu'il serait. Si c'est vrai, faites ce que vous avez à faire.
  2. Vérifiez que l'entrée est au format N et convertissez-la au format souhaité.
  3. Répétez l'étape 2 jusqu'à ce que vous ne sachiez pas dans quel format la date pourrait être.
  4. Afficher une erreur. (Et ne pas oublier d'arrêter la soumission et/ou le traitement ultérieur de l'entrée.)

~ Chris

PS: Recherche sur regexlib.com et google pour certains modèles de validation de date commune. Vous ne voulez pas inventer la roue à nouveau, n'est-ce pas?

2

Vous ne pouvez pas effectuer une correction automatique de jj/mm/aaaa ou mm/jj/aaaa, car il est impossible de dire si une personne a voulu dire jj/mm ou mm/jj dans des dates telles que 03/04/2009, par exemple.

Alors seule chose que vous pouvez faire est de couper le chèque avec regexp:

function CheckDateFormat() 
{ 
     EnteredText = document.getElementById('LDate').value; 
     LengthOfText = EnteredText.length; 
     Status = true; 
     dformat= /^\d{4}\/\d{1,2}\/\d{1,2}$/ 
     if (dformat.test(EnteredText) == null) 
     { 
      alert("Invalid date format"); 
      document.getElementById('LDate').focus; 
      status = false; 
     } 
     if (status == false) 
      break; 
} 
+0

Ok, je veux que la couleur de fond du contrôle soit rouge si la date n'est pas valide. J'ai essayé: document.getElementById ('LDate'). BgColor = "red"; Mais ça ne fonctionne pas. – RKh

0

Chris,

Merci pour la suggestion d'utiliser des widgets.

J'ai essayé la bibliothèque OpenJS et cela fonctionne parfaitement bien: