6
votes

JQuery DatePicker: Valider la date MM / DD / AAAA

J'ai une zone de texte et un daysPicker à côté de celui-ci et j'utilise ASP.NET et l'utilisateur peut entrer la date également sélectionnée la date à partir de DatePicker.

Comment valideriez-vous si la date est entrée correctement? p>

  <script type="text/javascript"> 
        $(document).ready(function () { 
            $('#<%=StartDate.ClientID%>').datepicker({ showOn: 'button', 
                    buttonImage: '../images/Calendar.png', 
                    buttonImageOnly: true, onSelect: function () { }, 
                    onClose: function () { $(this).focus(); } 
            }); 
        }); 
    </script> 


2 commentaires

Cela dépend de votre définition d'une date correcte?


par exemple 30/30/2008 n'est pas une date valide.


4 Réponses :


4
votes

Si vous utilisez ASP.NET, vous pouvez utiliser un Validator ASP.NET Comparez le validator [ Validateur de date ASP.NET ].

<script type="text/javascript">
    $(document).ready(function () {

        $.validator.addMethod("truedate", function (value, element, params) {
            function GetFullYear(year, params) {
                var twoDigitCutoffYear = params.cutoffyear % 100;
                var cutoffYearCentury = params.cutoffyear - twoDigitCutoffYear;
                return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));
            }

            var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$");
            try {
                m = value.match(yearFirstExp);
                var day, month, year;
                if (m != null && (m[2].length == 4 || params.dateorder == "ymd")) {
                    day = m[6];
                    month = m[5];
                    year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
                }
                else {
                    if (params.dateorder == "ymd") {
                        return null;
                    }
                    var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$");
                    m = value.match(yearLastExp);
                    if (m == null) {
                        return null;
                    }
                    if (params.dateorder == "mdy") {
                        day = m[3];
                        month = m[1];
                    }
                    else {
                        day = m[1];
                        month = m[3];
                    }
                    year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
                }
                month -= 1;
                var date = new Date(year, month, day);
                if (year < 100) {
                    date.setFullYear(year);
                }
                return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
            }
            catch (err) {
                return null;
            }
        }, "Please enter an actual date.");

        $("#form1").validate();

        $("#one").rules('add',
        {
            truedate: {
                cutoffyear: '2029',
                dateorder: 'mdy'
            }
        });
    });

</script>

<input id="one" />


8 commentaires

Je sais que j'ai la possibilité d'utiliser le contrôle ASP.NET, mais je voulais essayer d'utiliser la validation de JQuery.


J'ai pris le JavaScript produit par le Comparateur Validator et enveloppé une méthode personnalisée qui l'entoure


Vous pouvez également utiliser «distante» et sur le serveur essayer de le convertir en une date qui ne fonctionnera également que si c'est une date valide.


@Doc, obtention de cette erreur: erreur d'exécution Microsoft JScript: "$ .validator 'est null ou pas un objet


Avez-vous des références à la validation JQuery et JQuery? ( ajax.microsoft.com/ajax/jQuery .validate / 1.5.5 / ... )


Oups, je manquais la validation JS.


@Doc, comment puis-je faire une fonction distincte (validation de la date) afin que je puisse utiliser sur mes autres pages. - Merci.


Il suffit de mettre le code '$



0
votes

Puisque vous utilisez déjà jQuery, vous pouvez consulter http: // bassistance .de / jQuery-plugins / jQuery-plugin-validation / qui a une grande flexibilité pour les validations.


3 commentaires

J'utilise Bassistance.de pour la validation de ma forme mais je ne trouve aucun exemple de validation de la date, si vous trouvez s'il vous plaît me rediriger.


Il a une validation de date, mais il vérifie uniquement le format de la chaîne. "30/30/2008" serait une date valide.


@Doc: Il n'y a donc pas de moyen réel de vérifier la date? Ou suis-je parti avec une seule option d'utilisation des contrôles ASP.NET VALIDATIN?



33
votes

J'utilise ce gestionnaire pour valider l'entrée: xxx

espoir, ce sera utile pour quelqu'un


1 commentaires

Une réponse aussi parfaite avec un tel fanfare!



4
votes

J'utilise un mélange d'approche de Katrin & Doc Holiday, à l'aide de la méthode d'utilitaire parseDate de DatePicker Control dans un validateur personnalisé que j'ai appelé Isdate.

Changer simplement l'argument de format en parseDate à la valeur appropriée (référence: http: // docs. jquery.com/ui/datepicker/parseDate ). xxx

Ce n'est probablement pas la meilleure pratique du validateur de référencer un contrôle de l'interface utilisateur mais quels sont les diameurs. :)


0 commentaires