挑战:
您寻求验证格式日期输入字符串为“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中文网其他相关文章!