侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
WEB

jquery 验证 是否为有效的日期

Administrator
2025-03-26 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

以下是封装好的独立验证函数,可直接调用并返回布尔值:

javascript

复制

/**
 * 严格验证日期格式 YYYY-MM-DD
 * @param {string} input - 需要验证的日期字符串
 * @returns {boolean} - 是否为有效日期
 */
function isValidDate(input) {
    // 清理输入并格式验证
    const str = input.trim();
    const dateRegex = /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
    if (!dateRegex.test(str)) return false;

    // 提取日期组件
    const [, year, month, day] = dateRegex.exec(str).map(Number);

    // 闰年判断函数
    const isLeapYear = (y) => (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;

    // 月份天数映射表
    const monthDays = [
        31, // Jan
        isLeapYear(year) ? 29 : 28, // Feb (动态处理闰年)
        31, 30, 31, 30, // Mar-Jun
        31, 31, 30, 31, 30, 31  // Jul-Dec
    ];

    // 最终验证
    return day <= monthDays[month - 1];
}

使用示例

javascript

复制

// 测试用例
console.log(isValidDate('2023-02-28'));  // true
console.log(isValidDate('2020-02-29'));  // true
console.log(isValidDate('2023-02-29'));  // false
console.log(isValidDate('1995-04-31'));  // false
console.log(isValidDate('2023-13-01'));  // false

函数特性

  1. 纯函数:无副作用,不依赖外部状态

  2. 严格验证

    • 格式必须为 YYYY-MM-DD

    • 支持闰年检测

    • 验证实际存在的日期

  3. 高性能:使用预计算的天数表

  4. 容错处理:自动去除首尾空格

实现细节

  1. 正则表达式:严格限制输入格式

    javascript

    复制

    /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
  2. 动态二月天数:根据年份实时计算

    javascript

    复制

    isLeapYear(year) ? 29 : 28
  3. 快速验证:通过数组索引直接获取月份天数

    javascript

    复制

    monthDays[month - 1]

扩展使用建议

javascript

复制

// 在表单验证中使用
document.querySelector('#submitBtn').addEventListener('click', () => {
    const dateInput = document.querySelector('#dateInput').value;
    
    if (!isValidDate(dateInput)) {
        alert('请输入有效日期');
        return;
    }
    
    // 提交逻辑...
});

// 配合输入实时验证
document.querySelector('#dateInput').addEventListener('input', function() {
    this.classList.toggle('invalid', !isValidDate(this.value));
});

该函数可直接复制到任何 JavaScript 项目中使用,不依赖任何第三方库。

0

评论区