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




((?=\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



Procédez comme suit au fichier jquery.validationengine-en.js et mettez à jour la validation en ligne jj / mm / aaaa en incluant l'année bissextile:

"date": {
    // Check if date is valid by leap year
    "func": function (field) {
    //var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
    var pattern = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.](\d{4})$/);
    var match = pattern.exec(field.val());
    if (match == null)
    return false;

    //var year = match[1];
    //var month = match[2]*1;
    //var day = match[3]*1;
    var year = match[3];
    var month = match[2]*1;
    var day = match[1]*1;
    var date = new Date(year, month - 1, day); // because months starts from 0.

    return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
},
"alertText": "* Invalid date, must be in DD-MM-YYYY format"



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;

Example




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
}





Related