Frage

Wie kann ich ein benutzerdefiniertes Datumsformat angeben, um mit der href="http://docs.jquery.com/Plugins/Validation" rel="noreferrer"> Validation Plugin für jQuery?

War es hilfreich?

Lösung

Sie können Ihre eigenen Validierungsverfahren unter Verwendung der addMethod Funktion erstellen . Sagen Sie bitte bestätigen "dd / mm / yyyy" wollte:

$.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."
);

Und dann auf dem Formular hinzugefügt werden:

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

Andere Tipps

Nickf Antwort ist gut, aber beachten Sie, dass die Validierung Plug-in bereits Validierer für mehrere andere Datumsformate enthält, in der Zusatz methods.js Datei. Bevor Sie Ihre eigenen zu schreiben, stellen Sie sicher, dass jemand es nicht bereits getan hat.

Ich persönlich benutze die sehr gute http://www.datejs.com/ Bibliothek.

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

Sie können mit dem folgenden Ihr australischen Format zu erhalten und den Schalttag 29.02.2012 und nicht 29/02/2011 bestätigen:

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

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

Ich benutze auch das maskierte Input Plugins die Daten zu standardisieren http://digitalbush.com/ Projekte / maskiert-input-Plugin /

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

Hier ist ein Beispiel für eine neue Validierungsmethode, das fast jedes Datumsformat validieren, einschließlich:

  • TT / MM / JJ oder TT / MM / yyyy
  • dd.mm.yy oder TT.MM.JJJJ
  • dd, mm, yy oder dd, mm, jjjj
  • dd mm yy oder TTMMJJJJ
  • dd-mm-yy oder dd-mm-yyyy

Wenn Sie dann den Wert auf die PHP-Pass können Sie es konvertieren mit strtotime

Hier ist, wie die Methode hinzuzufügen:

    $.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!"
);

Dann fügen Sie den neuen Filter mit:

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

;

Hier ist ein spezieller Code Probe, die vor kurzem für mich gearbeitet:

// 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"
);

soll ich beachten Sie, dass diese tatsächlich ersetzt die integrierte Validierungsroutine Datum, obwohl ich nicht, dass dies mit dem aktuellen Plugin ein Problem verursachen soll sehen konnte.

Ich bewerben ich diese dann auf das Formular:

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

Das ist ich die Kombination / Modifizieren vorherige Posts meines gewünschtes Ergebnis zu erzielen:

        // Override built-in date validator
        $.validator.addMethod(
            "date",
            function (value, element) {
                //Return            NB: isRequired is not checked at this stage
                return (value=="")? true : isDate(value);
            },
            "* invalid"
        );

In Datum Validierung nach der Validierung Konfig. D. h nachdem die $ (Formular) .validate Aufruf ({...}) -Methode.

        //Add date validation (if applicable)
        $('.date', $(frmPanelBtnId)).each(function () {
            $(this).rules('add', {
                date: true
            });
        });

Schließlich ist die Haupt isDate Javascript-Funktion für UK Datumsformat geändert

//Validates a date input -- http://jquerybyexample.blogspot.com/2011/12/validate-date-    using-jquery.html
function isDate(txtDate) {
    var currVal = txtDate;
    if (currVal == '')
       return false;

  //Declare Regex  
  var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
  var dtArray = currVal.match(rxDatePattern); // is format OK?

  if (dtArray == null)
      return false;

   //Checks for dd/mm/yyyy format.
   var dtDay = dtArray[1];
   var dtMonth = dtArray[3];
   var dtYear = dtArray[5];

  if (dtMonth < 1 || dtMonth > 12)
      return false;
  else if (dtDay < 1 || dtDay > 31)
      return false;
  else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31)
      return false;
  else if (dtMonth == 2) {
      var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
      if (dtDay > 29 || (dtDay == 29 && !isleap))
          return false;
  }

  return true;
}

Jon, Sie einige Syntaxfehler haben, siehe unten, das ist für mich gearbeitet.

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

  $.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"
    );

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

});             

$.validator.addMethod("mydate", function (value, element) {

        return this.optional(element) || /^(\d{4})(-|\/)(([0-1]{1})([1-2]{1})|([0]{1})([0-9]{1}))(-|\/)(([0-2]{1})([1-9]{1})|([3]{1})([0-1]{1}))/.test(value);

    });

Sie können Eingang wie yyyy-mm-dd auch yyyy/mm/dd

aber können die die Größe des Monats irgendwann nur 28 oder 29 Tage Februar nicht beurteilen.

@blasteralfred:

Ich habe folgende Regel für mich richtiges Datum Validieren (TTMMJJJJ)

jQuery.validator.addMethod(
"validDate",
function(value, element) {
    return value.match(/(?:0[1-9]|[12][0-9]|3[01]) (?:0[1-9]|1[0-2]) (?:19|20\d{2})/);
},
"Please enter a valid date in the format DD MM YYYY"

);

Für DD / MM / YYYY

jQuery.validator.addMethod(
"validDate",
function(value, element) {
    return value.match(/(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/);
},
"Please enter a valid date in the format DD/MM/YYYY"

);

Dies wird nicht 01 13 2017 validieren und 2017.01.13.

Und auch nicht 50 12 2017 und 50/12/2017 nicht validiert werden.

ist einfach, Beispiel:. Gültig für HTML5 automatische type = "date"

<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/additional-methods.min.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/localization/messages_es.js"></script>

$(function () {

        // Overload method default "date" jquery.validate.min.js
        $.validator.addMethod(
            "date",
            function(value, element) {
                var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/;
                return value.match(dateReg);
            },
            "Invalid date"
        );

     // Form Demo jquery.validate.min.js
     $('#form-datos').validate({
        submitHandler: function(form) {
            form.submit();
        }
    });

});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top