تاريخ مخصص تنسيق مع التحقق من صحة مسج البرنامج المساعد

StackOverflow https://stackoverflow.com/questions/511439

سؤال

كيف يمكنني تحديد تاريخ مخصص فورمات سيتم التحقق مع التحقق من صحة البرنامج المساعد بالنسبة jQuery ؟

هل كانت مفيدة؟

المحلول

ويمكنك إنشاء الخاصة طريقة التحقق من صحة مخصصة باستخدام وظيفة addMethod . يقول أردت أن تحقق "يوم / شهر / سنة":

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

وبعد ذلك على النموذج الخاص بك إضافة:

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

نصائح أخرى

والجواب nickf هو جيد، لكن لاحظ أن التحقق من صحة المكونات في ويضم بالفعل المصادقون لعدة تنسيقات التاريخ الأخرى، في ملف إضافي methods.js. قبل أن تكتب بنفسك، تأكد من أن أحدا لم فعلت ذلك.

وأنا شخصيا استخدام http://www.datejs.com/ المكتبة.

وDocco هنا: http://code.google.com/p/datejs/wiki / APIDocumentation

ويمكنك استخدام التالية للحصول على شكل الاسترالي الخاص بك وسوف تحقق اليوم قفزة 29/02/2012 وليس 29/02/2011:

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

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

وأنا أيضا استخدام مدخلات ملثمين المساعد لتوحيد البيانات http://digitalbush.com/ مشاريع / ملثمين-المدخلات والمساعد /

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

هنا هو مثال جديد التحقق من صحة الطريقة التي سوف صحة تقريبا أي تنسيق التاريخ ، بما في ذلك:

  • dd/mm/yy أو dd/mm/yyyy
  • دد.مم.yy أو دد.مم.yyyy
  • دد ، مم ، yy أو دد ، ملم ، yyyy
  • dd mm yy أو dd mm yyyy
  • dd-mm-yy أو dd-mm-yyyy

ثم عند تمرير قيمة إلى php يمكنك تحويل ذلك مع strtotime

هنا هو كيفية إضافة طريقة:

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

ثم تضيف فلتر جديد مع:

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

;

وفيما يلي نموذج التعليمات البرمجية المحددة التي عملت بالنسبة لي مؤخرا:

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

وأود أن أشير إلى أن هذا يحل محل الواقع المدمج في تاريخ المصادقة روتينية، على الرغم من أنني لا يمكن أن نرى أن هذا يجب أن يسبب مشكلة مع البرنامج المساعد الحالي.

وثم طبق هذا النموذج باستخدام:

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

وهذا هو لي الجمع بين / تعديل المشاركات السابقة لتحقيق نتيجة بلدي المطلوب:

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

تاريخ الإضافة التحقق من صحة بعد التهيئة التحقق من الصحة. بمعنى آخر. بعد استدعاء $ (النموذج) .validate ({...}) الأسلوب.

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

وأخيرا، فإن الدالة IsDate جافا سكريبت الرئيسية المعدلة لتنسيق التاريخ UK

//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;
}

وجون، لديك بعض أخطاء في بناء الجملة، انظر أدناه، هذا العمل بالنسبة لي.

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

    });

ويمكنك إدخال مثل yyyy-mm-dd yyyy/mm/dd أيضا

ولكن لا يمكن الحكم على وقت فبراير يوما حجم شهريا فقط 28 أو 29.

وblasteralfred:

وحصلت على القاعدة التالية التحقق من صحة التاريخ الصحيح بالنسبة لي (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"

و)؛

ل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"

و)؛

وهذا لن تحقق 01 13 2017 و 2017/01/13.

وأيضا لا تحقق 50 12 2017 و 50/12/2017.

من السهل ، على سبيل المثال: صالحة HTML5 التلقائي نوع="تاريخ".

<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();
        }
    });

});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top