Question

J'ai une expression régulière en php qui recherche la date au format de yyyy-mm-dd

Ce que j'ai, c'est: [\d]{4}-[\d]{2}-[\d]{2}

J'utilise preg_match pour tester la date, le problème est que 2009-11-10 fonctionne, mais 2009-11-1033434 fonctionne aussi. Cela fait un certain temps que je n'ai pas fait l'expression regex, comment puis-je m'assurer qu'il s'arrête au bon endroit? J'ai essayé de faire /([\d]{4}-[\d]{2}-[\d]{2}){1}/, mais il renvoie le même résultat.

Toute aide serait grandement appréciée.

Était-ce utile?

La solution

Ce dont vous avez besoin, c'est d'ancres, en particulier ^ et $. Le premier correspond au début de la chaîne, le second correspond à la fin.

L'autre point que je ferais ferais [] sont inutiles. \d conserve sa signification en dehors des gammes de caractères.

Donc, votre regex devrait ressembler à ceci: /^\d{4}-\d{2}-\d{2}$/.

Autres conseils

Comment vous attendez-vous à ce que votre date soit résiliée?

Si une fin de ligne, alors un suivant $ devrait faire l'affaire.

Si par un caractère non chiffré, alors un négatif suivant affirmation (?!\d) fonctionnera également.

^20[0-2][0-9]-((0[1-9])|(1[0-2]))-([0-2][1-9]|3[0-1])$

J'ai ajouté un petit chèque supplémentaire pour aider à la question de MM et DD Se mêler par l'utilisateur. Cela n'attrape pas tous les mélanges de dattes, mais maintient le YYYY se séparer 2000 et 2029, la MM entre 01 et 12 et le DD entre 01 et 31

Vous voulez probablement mettre des ancres sur l'expression. c'est à dire

^[\d]{4}-[\d]{2}-[\d]{2}$

Remarquez le signe du caret et du dollar.

[\d]{4}-[\d]{2}-[\d]{2}?

Lorsque le point d'interrogation signifie "non-vert"

Vous voulez probablement regarder des affirmations (en supposant que votre moteur les prend en charge, PHP / Preg / PCRE)

Regardez les affirmations (ou les affirmations positives) vous permettent de dire "et il devrait être suivi de x, mais X ne devrait pas faire partie du match). Essayez la syntaxe suivante

\d{4}-\d{2}-\d{2}(?=[^0-9])

L'affirmation est cette partie

(?=[^0-9])

Cela dit "Après mon examen, le personnage suivant ne peut pas être un numéro"

Si cela ne vous offre pas ce que vous voulez / avez besoin, postez un exemple de votre entrée et de votre code PHP qui ne fonctionne pas. Ces deux éléments peuvent être extrêmement utiles pour déboguer ce genre de problèmes.

Vous pouvez essayer de mettre à la fois un symbole «^» et un «$» au début et à la fin de votre expression:

/^[\d]{4}-[\d]{2}-[\d]{2}$/

qui correspondent respectivement au début et à la fin de la chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top