【问题标题】:Custom date format with jQuery validation plugin使用 jQuery 验证插件自定义日期格式
【发布时间】:2010-10-05 09:59:07
【问题描述】:

如何为 jQuery 指定要使用 Validation Plugin 验证的自定义日期格式?

【问题讨论】:

    标签: jquery validation datetime-format


    【解决方案1】:

    您可以使用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
                }
            }
        })
    ;
    

    【讨论】:

    • @blasteralfred: // put your own logic here, this is just a (crappy) example
    • 你能建议我一个语法来验证我所需的格式 DD-MM-YYYY 吗?我是 jquery 的初学者 .. :)
    • 需要注意的是要把myDate改成日期输入字段的名字。
    • 您可以将示例 reg-ex 替换为;返回值.match(/^(((((0[1-9])|(1\d)|(2[0-8])))\/((0[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)(([02468][048])|([13579][26])))))$/);这支持闰年检查。例如。 29/02/20014 将失败验证 29/02/2016 将通过验证。
    【解决方案2】:

    nickf 的回答很好,但请注意,验证插件已经在 additional-methods.js 文件中包含了其他几种日期格式的验证器。在您自己编写之前,请确保尚未有人这样做。

    【讨论】:

    • 设置规则 dateISO: true,以 yyy-mm-dd 格式验证日期
    • 太好了,谢谢!例如,“dd/mm/yyyy”格式有“dateITA”。
    【解决方案3】:

    我个人使用非常好的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/projects/masked-input-plugin/

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

    【讨论】:

      【解决方案4】:

      下面是一个新的验证方法示例,它可以验证几乎任何日期格式,包括:

      • 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 时,您可以使用 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
              }
          }
      })
      

      ;

      【讨论】:

      • 为了包含mmm,我将正则表达式稍微修改为/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2]|[a-zA-Z]{3})[/., -](19|20)?\d{2}$/
      【解决方案5】:

      这是一个最近对我有用的特定代码示例:

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

        在您的验证配置之后添加日期验证。 IE。在调用 $(form).validate({ ... }) 方法之后。

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

        最后,主要的isDate Javascript函数修改为UK Date Format

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

        【讨论】:

          【解决方案7】:

          乔恩,你有一些语法错误,见下文,这对我有用。

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

          【讨论】:

            【解决方案8】:
            $.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

            但无法判断月份的大小,即 2 月 28 日或 29 天。

            【讨论】:

              【解决方案9】:

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

              );

              这不会验证 2017 年 1 月 13 日和 2017 年 1 月 13 日。

              而且也不验证 50 12 2017 和 50/12/2017。

              【讨论】:

                【解决方案10】:

                很简单,示例:适用于 HTML5 自动 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();
                        }
                    });
                
                });
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2018-10-21
                  • 1970-01-01
                  • 2012-10-11
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-12-24
                  • 2012-07-22
                  相关资源
                  最近更新 更多