2010-09-30 4 views
1

Je veux valider la date qui peut être soit au format de date courte ou au format de date longue. par exemple: pour une partie de la date valide.Expression régulière pour valider la date courte et longue au format jj/mm/aaaa en javascript

12/05/2010, 12/05/10, 05/12/10, 12-05-2010

var reLong = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/; 
var reShort = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/; 
var valid = (reLong.test(entry)) || (reShort.test(entry)); 
if(valid) 
{ 
return true; 
} 
else 
{ 
return false; 
} 

mais cela ne fonctionne pas en cours d'expression régulière lorsque je tente de donner une date invalide 12/05/20-0

+0

le droit de codeddict. Vous BTW pourrait être en mesure de combiner le 2 Regex togeter en un:^\ d {1,2} [\/-] \ d {1,2} [\/-] (\ d {2} | \ d {4 }) $ ... et le premier chiffre de mm pourrait également être optimisé - en fonction de ce que vous aimeriez faire. – DashK

Répondre

6

Cela se produit parce que 12/05/20 qui est une sous-chaîne de votre entrée 12/05/20-0 est une date valide.

Pour éviter les matches, vous pouvez substring utiliser des ancres comme:

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

Mais encore une fois la ci-dessus permet dates telles que 00/00/0000 et 29/02/NON_LEAP_YEAR qui ne sont pas valides.

Il est donc préférable d'utiliser une fonction de bibliothèque pour effectuer cette validation.

j'ai pu trouver une telle bibliothèque: datajs

+0

merci codaddict, y at-il un lien qui dépeint les validations ??? – nimi

+0

@Nimesh: J'ai mis à jour mon post avec une telle lib. – codaddict

4

Voici une regex légèrement plus robuste qui va tenter de filtrer certaines mauvaises dates:

^(1[012]|0[1-9])([\/\-])(0[1-9]|[12]\d|3[01])\2((?:19|20)?\d{2})$ 

entrée (comme on le voit sur rubular)

01/01/2001 # valid 
10-10-10 # valid 
09/09/1998 # valid 
00-00-0000 # invalid 
15-15-2000 # invalid 

Matchs d'un jour: 01 à 31, matches d'un mois: 01-12 et matchs d'années 1900-2099. Il vous forcera également à entrer un séparateur cohérent (par exemple: mm/dd/yyyy et mm-dd-yyyy fonctionne, mais pas mm-dd/yyyy).

Cela prendra encore quelques mauvaises dates (comme 02/30/2000), mais pour des raisons pratiques, il devrait être assez bon. Cela mettra également le mois, le jour et l'année dans les groupes de capture 1, 2 et 3 respectivement.

+0

cela validera-t-il les dates courtes et longues? – nimi

+0

@Nimesh Oui, il va – NullUserException

+0

Je crois que cela permettrait de valider «01/01-2001» ... –

Questions connexes