JavaScript 中的通配符日期形式

Wildcard date form in JavaScript

我想检查字符串是否满足条件(第一、第二、第四、第五、第七、第八、第九和第十字符可以是任意数字。第三个和第六个 必须是正斜杠。)像日期格式。我需要这个:

if (date !== SOMETHING ){
    alert("Wrong input!");}

您可以尝试用正则表达式匹配日期(这个确保它匹配格式(DD/MM/YYYY 或 MM/DD/YYYY):

if (date.match( /^\d{2}\/\d{2}\/\d{4}$/ )) {
   alert("Valid input!");
} else {
  alert("Wrong input!");
}

此正则表达式 /^\d{2}\/\d{2}\/\d{4}$/ returns true 如果字符串匹配以下模式:

  • 2 位数
  • 正斜杠
  • 2 位数
  • 正斜杠
  • 4 位数

这里有一个 JS Fiddle 显示它正在工作。

这是另一个(更多 "Eloquent")解决方案(return 通过函数获取 JavaScript 日期):

function findDate(string) {
  var dateTime = /(\d{2})\/(\d{2})\/(\d{4})/;
  var match = dateTime.exec(string);
  return new Date(Number(match[3]),
                  Number(match[2]) - 1,
                  Number(match[1]));
}

alert(findDate("30-01-2003"));

此外 - 我建议阅读 Regular Expressions - Eloquent JavaScript

如果您想验证格式并且它是一个有效的日期,您必须检查这些值。这可以用正则表达式来完成,但使用日期要简单得多,例如

// Validate dd/mm/yyy date string
function isValidDMY(s) {
  var b = s.split('/');
  var d = new Date(b[2], --b[1], b[0]);
  return d && d.getMonth() == b[1];
}

console.log(isValidDMY('4/4/2015'));   // true
console.log(isValidDMY('29/2/2015'));  // false

坚持用户输入日期的单个数字前导零确实没有意义,因此以上接受 4/4/2015 或 04/04/2015。

编辑

如果您坚持在日期和月份数字前导零,您也可以通过将最后一行更改为:

来检查这一点
  return /^(\d\d\/){2}\d{4}$/.test(s) && d && d.getMonth() == b[1];