Poster une réponse à un sujet: [JS REGEX] Améliorer ce regex afin d'accepter une date sur 4 chiffres
Attention, ce sujet est un sujet ancien (4924 jours sans réponse)
max
+1
ovh
En effet les regexp sont faits pour valider des formats, pas des valeurs.
gizmo
le code que tu donnes dans ton dernier message est le plus valide que tu puisses avoir avec une regexp en javascript. si tu veux plus de validation sur la date, tu vas devoir jouer avec l'objet Date.
Olaf
Je n'y connais strictement rien en JS, par contre une regexp ne t'aidera jamais à comparer une chaine avec la date courante. Dans un autre langage, je comparerais `date +M%d` à la date extraite de ta chaîne.
Une petite citation en prime ^^
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Mes 2 cents
Une petite citation en prime ^^
Citation de: Jamie Zawinski
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Mes 2 cents
dubinfo
A vue de pif et sans validation, je dirais :
/[12][890][0-9]{2}[0-1][0-9][0-3][0-9][MF][A-Z][0-9]{2}/gi
/[12][890][0-9]{2}[0-1][0-9][0-3][0-9][MF][A-Z][0-9]{2}/gi
Salut,
Merci pour ton aide.
Cela ne semble pas fonctionner :
L'année peut être supérieure à 2011
Le mois peut être supérieur à 12
Le jour peut être supérieur à 31
...
Ce code fonctionne :
if(!/^(19|20)([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[01])[FM][A-Z](0[1-9]|[1-9][0-9])$/i.test(dmu))
à part qu'il ne vérifie pas que l'année soit supérieure à l'année actuelle.
Merci quand même
Clandestino
A vue de pif et sans validation, je dirais :
/[12][890][0-9]{2}[0-1][0-9][0-3][0-9][MF][A-Z][0-9]{2}/gi
/[12][890][0-9]{2}[0-1][0-9][0-3][0-9][MF][A-Z][0-9]{2}/gi
dubinfo
Pourrais-tu donner plus d'info sur le format global accepté? Parce que là, ta regexp, elle pourrait vraiment être simplifiée et optimisée. Mais pour sa il faut connaitre la sémantique de ton code.
Salut,
Merci pour ta réponse.
Voici plus d'informations :
Format accepté : YYYYMMDDFL01
Exemple par rapport à ci-dessus : 20010912FL01
Les 4 premiers chiffres correspond à l'année, si on pourrait empêcher l'encodage d'une année supérieure à celle actuelle, ça serait bien.
Les deux suivant sont le mois (entre 01 et 12), la regex n'acepte pas 00 et 13 par exemple.
Les deux suivants correspondent au jour (entre 01 et 31).
La première lettre doit être obligatoirement M ou F (en minuscule ou en Majuscule).
La lettre juste après correspond à la première lettre du nom de famille.
Les deux derniers chiffres sont là pour éviter les doublons (deux patients qui auraient la même date de naissance, le même sexe, et la même première lettre du nom sont comme ça identifiés). Cela va de 01 à 99
J'espère avoir répondu à ta question.
Merci encore pour l'aide.
gizmo
Pourrais-tu donner plus d'info sur le format global accepté? Parce que là, ta regexp, elle pourrait vraiment être simplifiée et optimisée. Mais pour sa il faut connaitre la sémantique de ton code.
dubinfo
Bonjour tout le monde,
J'ai créé un regex qu me permet de contrôler ce format de données :
980903FL01
Maintenant, je dois donc remplacer
Il devrait donc accepter une année sur 4 chiffres.
Savez-vous me dire comment je peux ajouter cette information à ce regex ? :
Merci d'avance
Dubinfo
J'ai créé un regex qu me permet de contrôler ce format de données :
980903FL01
Maintenant, je dois donc remplacer
870209MD01
par 19870209MD01
.Il devrait donc accepter une année sur 4 chiffres.
Savez-vous me dire comment je peux ajouter cette information à ce regex ? :
if(!/^((0[1-9])|([1-9][0-9]))((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))[FM][A-Z]((0[1-9])|([1-9][0-9]))$/i.test(dmu))
Merci d'avance
Dubinfo