VALIDATION D'UNE DATE ENTRE LE 01/01/1600 ET 31/12/2699) AVEC UNE EXPRESSION RÉG
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 2015
-
16 mai 2012 à 18:53
witre
Messages postés1Date d'inscriptionvendredi 16 juillet 2004StatutMembreDernière intervention22 mai 2012
-
22 mai 2012 à 15:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
L'xpression régulière traite 4 types de date
1 les dates 'normales'
2 les dates pour le mois de février 'normal'
3 les dates pour le mois de février bisextille
4 les siclès spéciaux
pour les dates 'normales' c'est relativement simple:
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- les mois 1, 3, 5, 7, 8, 10, 13 ont 31 jours
- les mois 4, 6, 9, 11 ont 30 jours
pour les dates pour le mois de février 'normal':
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- le mois de février 'normal' à 28 jours
pour les dates pour le mois de février bisextille:
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
les années bisextilles dans un siècle sont:
00, 04, 08, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96.
Si on regarde les derniers chiffres, il y a 0, 4, 8, 2, 6.
A partir de là, on peut faire deux groupes
0, 4, 8 et 2, 6
Les siècles bisextilles commence donc par 0 ou 2 ou 4 ou 6 ou 8 suivies de 0 ou 4 ou 8. Les autres années bisextilles commencent par 1 ou 3 ou 5 ou 7 ou 9 suivi de 2 ou 6.
Ce qui se traduit en expression régulière par ([2468][048])|([13579][26])
pour les siclès spéciaux:
°°°°°°°°°°°°°°°°°°°°°°°°°
Mais il faut tenir compte des sièclès spéciaux (1700, 1800, 1900, 2100, 2200, 2300, 2500, 2600) qui ne sont pas bisextilles car ils ne sont pas divisible par 400.
Ce qui se traduit en expression régulière par (1[6-9]|2[0-6)\d\d
L'application de demo teste les dates entre le 01/01/1900 et 31/12/2999 pour 100 ans pour les jours 1, 28, 29, 30, 31.
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 16 mai 2012 à 23:25
salut,
'imbuvable' est peut être un peu sévère...
je pense que ça irait mieux si tu détaillais comment tu as construit ton expression régulière. (ta source d'info pour la construire)
tu pourrais aussi mettre quelques test sur des dates un peu particulières aussi pour voir qu'elle marche bien. par exemple en comparant avec le comparant avec le comportement du datetime du framework.
ceci dit ce code fait surement le boulot, donc pas de problème !
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 16 mai 2012 à 18:53
22 mai 2012 à 15:34
L'xpression régulière traite 4 types de date
1 les dates 'normales'
2 les dates pour le mois de février 'normal'
3 les dates pour le mois de février bisextille
4 les siclès spéciaux
pour les dates 'normales' c'est relativement simple:
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- les mois 1, 3, 5, 7, 8, 10, 13 ont 31 jours
- les mois 4, 6, 9, 11 ont 30 jours
pour les dates pour le mois de février 'normal':
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- le mois de février 'normal' à 28 jours
pour les dates pour le mois de février bisextille:
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
les années bisextilles dans un siècle sont:
00, 04, 08, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96.
Si on regarde les derniers chiffres, il y a 0, 4, 8, 2, 6.
A partir de là, on peut faire deux groupes
0, 4, 8 et 2, 6
Les siècles bisextilles commence donc par 0 ou 2 ou 4 ou 6 ou 8 suivies de 0 ou 4 ou 8. Les autres années bisextilles commencent par 1 ou 3 ou 5 ou 7 ou 9 suivi de 2 ou 6.
Ce qui se traduit en expression régulière par ([2468][048])|([13579][26])
pour les siclès spéciaux:
°°°°°°°°°°°°°°°°°°°°°°°°°
Mais il faut tenir compte des sièclès spéciaux (1700, 1800, 1900, 2100, 2200, 2300, 2500, 2600) qui ne sont pas bisextilles car ils ne sont pas divisible par 400.
Ce qui se traduit en expression régulière par (1[6-9]|2[0-6)\d\d
L'application de demo teste les dates entre le 01/01/1900 et 31/12/2999 pour 100 ans pour les jours 1, 28, 29, 30, 31.
16 mai 2012 à 23:25
'imbuvable' est peut être un peu sévère...
je pense que ça irait mieux si tu détaillais comment tu as construit ton expression régulière. (ta source d'info pour la construire)
tu pourrais aussi mettre quelques test sur des dates un peu particulières aussi pour voir qu'elle marche bien. par exemple en comparant avec le comparant avec le comportement du datetime du framework.
ceci dit ce code fait surement le boulot, donc pas de problème !
16 mai 2012 à 18:53