如何使用jquery以此格式验证日期(yyyy-mm-dd)?

use*_*752 25 javascript jquery

我试图以这种格式验证日期:(yyyy-mm-dd).我找到了这个解决方案,但它的格式与我需要的格式不同,如:(mm/dd/yyyy).

以下是该解决方案的链接:http://jsfiddle.net/ravi1989/EywSP/848/

我的代码如下:

function isDate(txtDate)
{
    var currVal = txtDate;
    if(currVal == '')
        return false;

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

    if (dtArray == null) 
        return false;

    //Checks for mm/dd/yyyy format.
    dtMonth = dtArray[1];
    dtDay= dtArray[3];
    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;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用什么正则表达式模式来解释无效日期和闰年?

Gob*_*ord 61

我稍微扩展了上面发布的isValidDate函数Thorbin(使用正则表达式).我们使用正则表达式来检查格式(以防止我们获得另一种对Date有效的格式).在这个松散检查之后,我们实际上通过Date构造函数运行它,如果在这种格式下有效,则返回true或false.如果它不是有效日期,我们将从此函数中获取错误.

function isValidDate(dateString) {
  var regEx = /^\d{4}-\d{2}-\d{2}$/;
  if(!dateString.match(regEx)) return false;  // Invalid format
  var d = new Date(dateString);
  var dNum = d.getTime();
  if(!dNum && dNum !== 0) return false; // NaN value, Invalid date
  return d.toISOString().slice(0,10) === dateString;
}


/* Example Uses */
console.log(isValidDate("0000-00-00"));  // false
console.log(isValidDate("2015-01-40"));  // false
console.log(isValidDate("2016-11-25"));  // true
console.log(isValidDate("1970-01-01"));  // true = epoch
console.log(isValidDate("2016-02-29"));  // true = leap day
console.log(isValidDate("2013-02-29"));  // false = not leap day
Run Code Online (Sandbox Code Playgroud)


Tho*_*isé 19

如果这对你来说足够了,你也可以使用正则表达式来完成一个稍微简单的工作(例如,如[1]中所示).

它们内置于javascript中,因此您可以在没有任何库的情况下使用它们.

function isValidDate(dateString) {
  var regEx = /^\d{4}-\d{2}-\d{2}$/;
  return dateString.match(regEx) != null;
}
Run Code Online (Sandbox Code Playgroud)

将是一个功能来检查给定的字符串是否是四个数字 - 两个数字 - 两个数字(几乎是yyyy-mm-dd).但是你可以用更复杂的表达式做更多事情,例如检查[2].

isValidDate("23-03-2012") // false
isValidDate("1987-12-24") // true
isValidDate("22-03-1981") // false
isValidDate("0000-00-00") // true
Run Code Online (Sandbox Code Playgroud)


Fre*_*k.L 10

由于jQuery被标记,这里是一个简单/用户友好的方式来验证必须是日期的字段(您将需要jQuery验证插件):

HTML

<form id="frm">
<input id="date_creation" name="date_creation" type="text" />
</form>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$('#frm').validate({
  rules: {
    date_creation: {
      required: true,
      date: true
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

DEMO +示例


更新:经过一番挖掘后,我发现没有任何可用于设置特定日期格式的准备参数的证据.

但是,您可以在自定义规则中插入您选择的正则表达式:)

$.validator.addMethod(
    "myDateFormat",
    function(value, element) {
        // yyyy-mm-dd
        var re = /^\d{4}-\d{1,2}-\d{1,2}$/;

        // valid if optional and empty OR if it passes the regex test
        return (this.optional(element) && value=="") || re.test(value);
    }
);

$('#frm').validate({
  rules: {
    date_creation: {
      // not optional
      required: true,
      // valid date
      date: true
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

这个新规则意味着您的标记更新:

<input id="date_creation" name="date_creation" type="text" class="myDateFormat" />
Run Code Online (Sandbox Code Playgroud)


小智 6

这是 YYYY-MM-DD 格式的 JavaScript 拒绝

/([12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]))/


Zah*_*med 5

试试这里这是工作演示:

$(function() {
    $('#btnSubmit').bind('click', function(){
        var txtVal =  $('#txtDate').val();
        if(isDate(txtVal))
            alert('Valid Date');
        else
            alert('Invalid Date');
    });

function isDate(txtDate)
{
    var currVal = txtDate;
    if(currVal == '')
        return false;

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

    if (dtArray == null) 
        return false;

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

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

});
Run Code Online (Sandbox Code Playgroud)

改变正则表达式是:

var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //Declare Regex
Run Code Online (Sandbox Code Playgroud)

  • 您错过了调用函数“validate”的绝佳机会。就说人... (2认同)

Yoa*_*man 5

 moment(dateString, 'YYYY-MM-DD', true).isValid() ||
 moment(dateString, 'YYYY-M-DD', true).isValid() ||
 moment(dateString, 'YYYY-MM-D', true).isValid();
Run Code Online (Sandbox Code Playgroud)


Nie*_*sol 1

将正则表达式重新排列为:

/^(\d{4})([\/-])(\d{1,2})\2(\d{1,2})$/
Run Code Online (Sandbox Code Playgroud)

我所做的不仅仅是重新排列条款,我还做了一些工作,以便它不会接受像yyyy-mm/dd.

之后,您需要调整您的dtMonth等变量,如下所示:

dtYear = dtArray[1];
dtMonth = dtArray[3];
dtDay = dtArray[4];
Run Code Online (Sandbox Code Playgroud)

之后,代码应该可以正常工作。