Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要使用javascript验证日期是否在过去的帮助吗_Javascript_Regex - Fatal编程技术网

需要使用javascript验证日期是否在过去的帮助吗

需要使用javascript验证日期是否在过去的帮助吗,javascript,regex,Javascript,Regex,嗨,我现在被困在如何分割我的正则表达式日期,然后测试输入的日期是否在过去。如果是,我想提醒大家 我知道我有一些需要拼接我的正则表达式,但我不确定如何做到这一点任何帮助将不胜感激。下面是我的脚本到目前为止,它是一个相当长的正则表达式,但它涵盖了一切,包括闰年,但正如我所说,我知道需要通过substr或splice来分解它 //start of datefield var dateformat=/^(?:(?:31\/(?:0[13578]|1[02])|(?:29|30)\/(?:0[13-9]|

嗨,我现在被困在如何分割我的正则表达式日期,然后测试输入的日期是否在过去。如果是,我想提醒大家

我知道我有一些需要拼接我的正则表达式,但我不确定如何做到这一点任何帮助将不胜感激。下面是我的脚本到目前为止,它是一个相当长的正则表达式,但它涵盖了一切,包括闰年,但正如我所说,我知道需要通过substr或splice来分解它

//start of datefield
var dateformat=/^(?:(?:31\/(?:0[13578]|1[02])|(?:29|30)\/(?:0[13-9]|1[012])|(?:0[1-9]|1\d|2[0-8])\/(?:0[1-9]|1[0-2]))\/[2-9]\d{3}|29\/02\/(?:[2-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[3579][26])00))$/;

if (!date.match(dateformat))
{
    alert("format incorrect use dd/mm/yyyy make sure you are entering correct days to the month remember 30 days have september, april, june & november, only 28 days in february unless leap year next is 2016");
    return false;
}
//end date field
简单的

date=“12/11/2009”;
如果(新日期(日期)<新日期()){
//a
}否则{
//b
}

使用正则表达式计算日期是否有效,或者日期是否在其他时间之前或之后,这并不是最简单的方法。将字符串转换为日期对象并进行测试要容易得多

因此,解析字符串以创建一个日期对象,并从那里开始。您不应该将日期字符串的解析留给date对象,因为它主要依赖于实现(ECMA-262指定了ISO8601的一个版本,但并非所有正在使用的浏览器都支持它)。因此,如果您的格式为d/m/y,您可以:

function isDateHistory(s) {
  s = s.split('/');
  return (new Date(s[2], --s[1], s[0])) < (new Date());
}

alert(isDateHistory('15/6/2013')); // true
alert(isDateHistory('15/7/2013')); // false

我的建议是:扔掉那个正则表达式。在这里检查我的答案,这应该有助于你为什么需要使用正则表达式?使用其他人的作品!或者使用日期选择器……请注意,非标准日期字符串的解析依赖于实现。OP需要d/m/y,但大多数浏览器将上述字符串视为m/d/y(即2009年12月11日)。因此,应该手动解析日期字符串,以确保它们是按要求处理的,而不是偶然发生的情况你好,罗布,谢谢你的帮助,所以我要把你写的东西添加到我的脚本底部,对不起,我对javascript非常陌生,我想我可以使用我的正则表达式来验证正确的dat,但不知何故,我可以从中取一部分,然后检查它是否在过去,你可以告诉我如何将一个工作脚本发送到1。检查日期是否有效,包括检查闰年,然后检查输入的日期是否为过去的日期,如果是,则显示警报,感谢您花时间提供帮助。@adam-我想我的答案可以同时完成这两个任务。如果您愿意,可以将其组合到一个函数中,但大多数实用程序函数只做一件事。嗨,rob,我可以给您发送一条私人消息,向您展示我的完整代码,因为我正在努力理解您的意思,我基本上已经写了一个完整的表单,希望所有的验证都在一个功能中。我正在努力的是日期验证,并将所有警报合并到一个警报框中,如果您能提供帮助的话,我会非常高兴,因为这真的让我很紧张:)谢谢你,罗布,我非常抱歉,但我仍然不明白下面要写什么我已经附上了我的整个脚本这是一个完整的表格,我唯一需要纠正的是日期字段,请你告诉我如何一步一步地正确插入我的脚本,非常感谢你的帮助和时间。
function isDateHistory(s) {
  s = s.split('/');
  return (new Date(s[2], --s[1], s[0])) < (new Date());
}

alert(isDateHistory('15/6/2013')); // true
alert(isDateHistory('15/7/2013')); // false
function validateDate(dateString) {
  var s = dateString.split('/');
  var d = new Date(s[2], --s[1], s[0]);
  return d && d.getFullYear() == s[2] && d.getDate() == s[0];
}