85 votes

Format de date personnalisé avec le plugin de validation jQuery

Comment puis-je spécifier un format de date personnalisé qui sera validé avec la fonction de validation de la date ? Plugin de validation pour jQuery ?

132voto

nickf Points 185423

Vous pouvez créer votre propre méthode de validation personnalisée à l'aide de la fonction addMethod fonction. Supposons que vous vouliez valider "dd/mm/yyyy" :

$.validator.addMethod(
    "australianDate",
    function(value, element) {
        // put your own logic here, this is just a (crappy) example
        return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
    },
    "Please enter a date in the format dd/mm/yyyy."
);

Et ensuite sur votre formulaire ajouter :

$('#myForm')
    .validate({
        rules : {
            myDate : {
                australianDate : true
            }
        }
    })
;

13 votes

@blasteralfred : // put your own logic here, this is just a (crappy) example

0 votes

Pouvez-vous me suggérer une syntaxe qui valide le format requis DD-MM-YYYY ? Je suis un débutant en jquery :)

0 votes

Il faut noter que vous devez changer myDate au nom du champ de saisie de la date.

59voto

Craig Stuntz Points 95965

La réponse de nickf est bonne, mais notez que le plug-in de validation inclut déjà des validateurs pour plusieurs autres formats de date, dans le fichier additional-methods.js. Avant d'écrire le vôtre, assurez-vous que personne ne l'a déjà fait.

0 votes

Définition de la règle dateISO : true, valide la date au format aaa-mm-jj

1 votes

Super, merci ! Il existe "dateITA" pour le format "dd/mm/yyyy", par exemple.

22voto

Soth Points 349

J'utilise personnellement le très bon http://www.datejs.com/ bibliothèque.

Ici Docco : http://code.google.com/p/datejs/wiki/APIDocumentation

Vous pouvez utiliser ce qui suit pour obtenir votre format australien et validera le jour bissextile 29/02/2012 et non 29/02/2011 :

jQuery.validator.addMethod("australianDate", function(value, element) { 
    return Date.parseExact(value, "d/M/yyyy");
});

$("#myForm").validate({
   rules : {
      birth_date : { australianDate : true }
   }
});

J'utilise également le plugin d'entrée masquée pour standardiser les données. http://digitalbush.com/projects/masked-input-plugin/

$("#birth_date").mask("99/99/9999");

18voto

Babailiica Points 126

Voici un exemple d'une nouvelle méthode de validation qui permettra de valider presque tous les formats de date, notamment :

  • jj/mm/aa ou jj/mm/aaaa
  • dd.mm.yy ou dd.mm.yyyy
  • jj,mm,aa ou jj,mm,aaaa
  • jj mm aa ou jj mm aaaa
  • dd-mm-yy ou dd-mm-yyyy

Ensuite, lorsque vous passez la valeur au php, vous pouvez la convertir avec strtotime

Voici comment ajouter la méthode :

    $.validator.addMethod("anyDate",
    function(value, element) {
        return value.match(/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2])[/., -](19|20)?\d{2}$/);
    },
    "Please enter a date in the format!"
);

Ensuite, vous ajoutez le nouveau filtre avec :

$('#myForm')
.validate({
    rules : {
        field: {
            anyDate: true
        }
    }
})

;

0 votes

Et d'inclure mmm j'ai légèrement modifié la regex pour qu'elle devienne /^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2]|[a-zA-Z]{3})[/., -](19|20)?\d{2}$/

13voto

Simon Wheatley Points 128

Voici un exemple de code spécifique qui a fonctionné pour moi récemment :

// Replace the builtin US date validation with UK date validation
$.validator.addMethod(
    "date",
    function ( value, element ) {
        var bits = value.match( /([0-9]+)/gi ), str;
        if ( ! bits )
            return this.optional(element) || false;
        str = bits[ 1 ] + '/' + bits[ 0 ] + '/' + bits[ 2 ];
        return this.optional(element) || !/Invalid|NaN/.test(new Date( str ));
    },
    "Please enter a date in the format dd/mm/yyyy"
);

Je dois noter que cela remplace en fait la routine de validation de date intégrée, bien que je n'aie pas vu que cela puisse causer un problème avec le plugin actuel.

Je l'ai ensuite appliqué au formulaire en utilisant :

$( '#my_form input.date' ).rules( 'add', { date: true } );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X