تاريخ مخصص تنسيق مع التحقق من صحة مسج البرنامج المساعد
-
21-08-2019 - |
سؤال
كيف يمكنني تحديد تاريخ مخصص فورمات سيتم التحقق مع التحقق من صحة البرنامج المساعد بالنسبة 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();
}
});
});