S'il est relativement facile de vérifier qu'une date semble valide (jour de 1 à 31 éventuellement de 1 à 30 / mois de 1 à 12 et année sur 4 chiffres), il est beaucoup plus difficile de vérifier réellement qu'une date entrée correspond à une vraie date (en particulier pour les années bissextiles).
Heureusement, l'objet Date() de javascript possède une astuce souvent méconnue :
Toute valeur numérique est valable pour la définition d'une date, du coup, si vous entrez une date qui n'existe pas, javascript va rectifier de lui-même (par exemple, le 32 janvier deviendra le 1er février).
Grâce à cette astuce, nous pouvons facilement vérifier le format de la date (dans l'exemple donné le jour et le mois sur 1 ou 2 chiffres et l'année sur 4 séparés par des /) puis on affecte les valeurs splittées à une nouvelle date (en prenant soin de rectifier le mois qui commence par 0 en js !) et on vérifie que le jour le mois et l'année obtenus sont identiques à ceux de la date initiale.
Si ce n'est pas le cas, la date n'est pas valide !
Voici la source :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Vérification de date</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="Author" content="Bovino - www.developpez.com" /> <script type="text/javascript"> <!-- function verif(){ var date_pas_sure = document.getElementById('valeur').value; var format = /^(\d{1,2}\/){2}\d{4}$/; if(!format.test(date_pas_sure)){alert('Date non valable !')} else{ var date_temp = date_pas_sure.split('/'); date_temp[1] -=1; // On rectifie le mois !!! var ma_date = new Date(); ma_date.setFullYear(date_temp[2]); ma_date.setMonth(date_temp[1]); ma_date.setDate(date_temp[0]); if(ma_date.getFullYear()==date_temp[2] && ma_date.getMonth()==date_temp[1] && ma_date.getDate()==date_temp[0]){ alert('Date valable !'); } else{ alert('Date non valable !'); } } } //--> </script> </head> <body> <form action="javascript:verif()"> <div style="margin: 50px 0 0 50px"> <label for="valeur">Entrez un date au format jj/mm/aaaa : </label> <input type="text" id="valeur" /><br /> <input type="submit" value="Vérifier la date" /> </div> </form> </body> </html>
Partager