首页  >  文章  >  web前端  >  为什么 JavaScript 日期验证代码无法正确验证“mm/dd/yyyy”格式?

为什么 JavaScript 日期验证代码无法正确验证“mm/dd/yyyy”格式?

DDD
DDD原创
2024-10-30 09:24:02296浏览

Why does the JavaScript date validation code fail to validate the

在 JavaScript 中验证日期格式“mm/dd/yyyy”

挑战:

您寻求验证格式日期输入字符串为“mm/dd/yyyy”。但是,您尝试的现有代码片段未能有效执行此任务。

问题:

所提供的日期验证代码中的潜在问题可能是什么?

说明:

给定的代码旨在验证遵循“mm/dd/yyyy”格式的日期字符串。但是,代码中可能存在一些错误或不一致,导致其无法正常运行。让我们检查代码并识别潜在问题:

<code class="js">function isDate(ExpiryDate) {
  var objDate, // date object initialized from the ExpiryDate string
    mSeconds, // ExpiryDate in milliseconds
    day, // day
    month, // month
    year; // year
  // date length should be 10 characters (no more no less)
  if (ExpiryDate.length !== 10) {
    return false;
  }
  // third and sixth character should be '/'
  if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') {
    return false;
  }
  // extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy)
  // subtraction will cast variables to integer implicitly (needed
  // for !== comparing)
  month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0
  day = ExpiryDate.substring(3, 5) - 0;
  year = ExpiryDate.substring(6, 10) - 0;
  // test year range
  if (year < 1000 || year > 3000) {
    return false;
  }
  // convert ExpiryDate to milliseconds
  mSeconds = new Date(year, month, day).getTime();
  // initialize Date() object from calculated milliseconds
  objDate = new Date();
  objDate.setTime(mSeconds);
  // compare input date and parts from Date() object
  // if difference exists then date isn't valid
  if (
    objDate.getFullYear() !== year ||
    objDate.getMonth() !== month ||
    objDate.getDate() !== day
  ) {
    return false;
  }
  // otherwise return true
  return true;
}</code>

此代码的一个可能问题是尝试将月份提取为 Month = ExpiryDate.substring(0, 2) - 1。这会从月份中减去 1值,可能会导致无效的月份数字。要纠正此问题,您应该将月份提取为 Month = parseInt(ExpiryDate.substring(0, 2), 10) - 1。

另一个潜在问题在于处理年份。该代码检查年份是否在 1000 到 3000 的范围内,但没有考虑 2 位数年份的可能性(例如“19”或“20”)。为了同时容纳 2 位和 4 位年份,您可以修改年份提取和验证逻辑,如下所示:

<code class="js">// extract year
if (ExpiryDate.substring(6, 7) === '/') {
  year = parseInt(ExpiryDate.substring(6, 8), 10); // 2-digit year
} else {
  year = parseInt(ExpiryDate.substring(6, 10), 10); // 4-digit year
}
// test year range
if (year < 1000 || year > 2999) {
  return false;
}</code>

此外,代码当前假设“mm/dd/yyyy”格式为严格遵守。如果您想要更宽松并允许灵活的日期字符串格式(例如,允许斜杠以外的分隔字符),则需要相应地修改代码。

以上是为什么 JavaScript 日期验证代码无法正确验证“mm/dd/yyyy”格式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn