Javascript date regex JJ / MM / AAAA


Answers

Vous pouvez prendre l'expression rationnelle qui valide AAAA / MM / JJ et retournez-la pour obtenir ce dont vous avez besoin pour JJ / MM / AAAA:

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

BTW - cette regex valide pour JJ / MM / AAAA ou JJ-MM-AAAA

PS Cela permettra des dates telles que 31/02/4899

Question

Je sais qu'il y a beaucoup de threads regex là-bas j'ai besoin d'un pattern spécifique

Cette regex valide dans un format AAAA-MM-JJ

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

J'ai besoin que le modèle soit JJ / MM / AAAA (le premier jour car il est en espagnol et seulement "/", "-" ne devrait pas être autorisé)

J'ai cherché plusieurs librairies regex et je pense que celle-ci devrait marcher ... mais comme je ne suis pas familier avec regex je ne suis pas sûr que ça valide ça

(0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d

Je ne sais pas ho pour échapper aux slashs, j'essaye de "voir" la logique dans la chaine mais c'est comme essayer de "voir" le code Matrix pour moi. Je place la chaîne regex dans une option .js

[...]  },
"date": {
                    "regex": (0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d,
                    "alertText": "Alert text AAAA-MM-DD"
                },
"other type..."[...]

Donc, si la regex est ok, comment pourrais-je y échapper? si ce n'est pas le cas, quelle est la regex correcte et comment puis-je y échapper? : P

Merci beaucoup




Jetez un oeil d'ici http://forums.asp.net/t/1410702.aspx/1

Utilisez les détails de l'Expression Régulière suivants, cela prendra en charge également l'année bissextile.

var reg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;

Exemple




Pour les personnes qui ont besoin de valider des années plus tôt que l'année 1900, le suivant devrait faire l'affaire. En fait, c'est la même chose que la réponse ci-dessus donnée par [@OammieR][1] MAIS avec des années comprenant 1800 - 1899.

/^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((18|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((18|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/

J'espère que cela aide quelqu'un qui a besoin de valider des années antérieures à 1900, comme le 01/01/1855 , etc.

Merci @OammieR pour l'idée initiale.




Les barres obliques Scape utilisent simplement \ before / et elles seront échappées. ( \/ => / ).

Sinon, vous êtes regex JJ / MM / AAAA pourrait être le suivant:

/^[0-9]{2}[\/]{1}[0-9]{2}[\/]{1}[0-9]{4}$/g

Explication:

  • [0-9] : Juste des chiffres
  • {2} ou {4} : Longueur 2 ou 4. Vous pouvez aussi faire {2,4} pour la longueur entre deux nombres (2 et 4 dans ce cas)
  • [\/] : Caractère /
  • g : Global - Ou m : Multiline (Facultatif, voir vos demandes)
  • $ : Ancrage à la fin de la chaîne. (Facultatif, voir vos demandes)
  • ^ : Début de la chaîne. (Facultatif, voir vos demandes)

Un exemple d'utilisation:

var regex = /^[0-9]{2}[\/][0-9]{2}[\/][0-9]{4}$/g;

var dates = ["2009-10-09", "2009.10.09", "2009/10/09", "200910-09", "1990/10/09", 
    "2016/0/09", "2017/10/09", "2016/09/09", "20/09/2016", "21/09/2016", "22/09/2016",
    "23/09/2016", "19/09/2016", "18/09/2016", "25/09/2016", "21/09/2018"];

//Iterate array
dates.forEach(
    function(date){
        console.log(date + " matches with regex?");
      console.log(regex.test(date));
    });

Bien sûr, vous pouvez utiliser comme booléen:

if(regex.test(date)){
     //do something
}



((?=\d{4})\d{4}|(?=[a-zA-Z]{3})[a-zA-Z]{3}|\d{2})((?=\/)\/|\-)((?=[0-9]{2})[0-9]{2}|(?=[0-9]{1,2})[0-9]{1,2}|[a-zA-Z]{3})((?=\/)\/|\-)((?=[0-9]{4})[0-9]{4}|(?=[0-9]{2})[0-9]{2}|[a-zA-Z]{3})

Regex Compile dessus

2012/22/Jan
2012/22/12 
2012/22/12
2012/22/12
2012/22/12
2012/22/12
2012/22/12
2012-Dec-22
2012-12-22
23/12/2012
23/12/2012
Dec-22-2012
12-2-2012
23-12-2012
23-12-2012