JQuery सत्यापन प्लगइन के साथ कस्टम तिथि प्रारूप


जवाबों:


129

आप addMethodफ़ंक्शन का उपयोग करके अपनी स्वयं की कस्टम सत्यापन विधि बना सकते हैं । आप "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."
);

और फिर अपने फॉर्म ऐड में:

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

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

क्या आप मुझे एक सिंटैक्स सुझा सकते हैं जो मेरे आवश्यक प्रारूप DD-MM-YYYY को मान्य करता है ?? मैं jquery में एक शुरुआत कर रहा हूँ .. :)
अल्फ्रेड

यह ध्यान दिया जाना चाहिए कि आपको myDateतारीख इनपुट फ़ील्ड के नाम में बदलना चाहिए ।
user2019515

आप उदाहरण को reg-ex से बदल सकते हैं; return value.match (/ ^ (((((([[1-9]] (1 \ d)) (2 [0-8])) \ / (([[1-9])) | (1 [] 0-2]))) | ((31 \ / ((0 [13578]) | (1 [02]))) | ((29 | 30) \ / ((0 [1,3-9]) | (1 [0-2]))))) \ / ((20 [0-9] [0-9]) | (19 [0-9] [0-9]))) | ((29 \ / 02 \ / (19 | 20) (([02,468] [048]) | ([13,579] [26])))) $ /); यह लीप ईयर चेकिंग का समर्थन करता है। उदाहरण के लिए। 29/02/20014 सत्यापन विफल हो जाएगा 29/02/2016 पास सत्यापन होगा।
गैविन बुमानिस

58

निकफ का उत्तर अच्छा है, लेकिन ध्यान दें कि सत्यापन प्लग-इन में पहले से ही कई अन्य दिनांक प्रारूपों के लिए सत्यापनकर्ता शामिल हैं, अतिरिक्त-मेथड्स.जेएस फ़ाइल में। इससे पहले कि आप अपना स्वयं का लिखें, सुनिश्चित करें कि किसी ने पहले से ही ऐसा नहीं किया है।


नियम की तिथि तय करना: सत्य, प्रारूप में दिनांक मान्य करना yyy-mm-dd
gentrobot

1
बहुत धन्यवाद! उदाहरण के लिए "dd / mm / yyyy" प्रारूप के लिए "dateITA" है।
एलन सिल्जाक

22

मैं व्यक्तिगत रूप से बहुत अच्छे http://www.datejs.com/ लाइब्रेरी का उपयोग करता हूं ।

यहाँ डोको 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/projects/masked-input-plugin/ डेटा मानकीकृत करने के लिए नकाबपोश इनपुट प्लगइन का भी उपयोग करता हूं

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

18

यहाँ एक नया सत्यापन विधि के लिए एक उदाहरण है जो लगभग किसी भी तारीख प्रारूप को मान्य करेगा, जिसमें शामिल हैं:

  • dd / mm / yy या dd / mm / yyyy
  • dd.mm.yy या dd.mm.yyyy
  • dd, mm, yy या dd, mm, yyyy
  • dd mm yy या dd mm yyyy
  • dd-mm-yy या dd-mm-yyyy

फिर, जब आप php को मान पास करते हैं तो आप इसे स्ट्रेटोटाइम से बदल सकते हैं

यहाँ विधि जोड़ने का तरीका बताया गया है:

    $.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
        }
    }
})

;


और शामिल करने के लिए mmm, मैंने regex को थोड़ा संशोधित किया है/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2]|[a-zA-Z]{3})[/., -](19|20)?\d{2}$/
Warren

13

यहाँ एक विशिष्ट कोड नमूना है जो मेरे लिए हाल ही में काम किया है:

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

6

यह मेरा वांछित परिणाम प्राप्त करने के लिए पिछली पोस्टों को संयोजित / संशोधित करना है:

        // 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) ({...}) विधि को कॉल करने के बाद Ie।

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

अंत में, यूके डेट फॉर्मेट के लिए मुख्य डीट जावास्क्रिप्ट फ़ंक्शन को संशोधित किया गया है

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

4

जॉन, आपके पास कुछ सिंटैक्स त्रुटियां हैं, नीचे देखें, यह मेरे लिए काम करता है।

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

});             


3
$.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 दिनों में कुछ महीने फरवरी के आकार का न्याय नहीं कर सकते।



1

@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 और 01/13/2017 को मान्य नहीं होगा।

और 50 12 2017 और 50/12/2017 को भी मान्य नहीं करता है।


0

आसान है, उदाहरण: 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();
        }
    });

});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.