JS使用正则表达式和Date()对象校验日期

需求:

校验日期是否符合YYYY-MM-DD的格式,且日期是否为合法日期。

 

思路:

通过正则表达式校验日期的格式是否符合FORMAT。

var dateReg = /^(\d{4})-(\d{2})-(\d{2})$/;

其中的()是正则表达式中的捕获组,可以通过RegExp.$1 的方法取出 () 中匹配到内容,等一下可以直接将匹配到的年月日取出来。

 

然后判断还需要判断是否是一个合法日期,比如2月是没有30号的,所以2020-02-30不是一个合法的日期。

可以借用JS中自带的 Date() 对象进行校验,Date() 支持传入年月日的新建方式:

var d = new Date(year, month, days);

新建 Date() 对象时会将日期转化为合法日期,比如 2020-02-30 被转化为 2020-3-1。通过判断进行转化后的日期是否与原来相同的方法来判断日期是否合法。

 

以下是完整代码:

var dateReg = /^(\d{4})-(\d{2})-(\d{2})$/;

function verifyDate(dateStr, dateReg){
    //日期格式不匹配
    if( !dateReg.test(dateStr) ){
        return false;
    }

    //使用捕获组获取日期
    var date = {
        year : RegExp.$1,
        month : RegExp.$2,
        day : RegExp.$3,
    }

    //使用 Date() 对象,新建对象时会将日期转化为合法日期
    //比如 2020-02-30 被转化为 2020-3-1
    var dateObj = new Date(date.year, date.month-1, date.day);

    if( date.year != dateObj.getFullYear() || date.month != dateObj.getMonth()+1 || date.day != dateObj.getDate() ){
        return false;
    }

    return true;
}

var test1 = "2020-11-25";
var test2 = "2020-02-30";
var test3 = "a2020-11-256";
var test4 = "2020-1-1";

console.log(verifyDate(test1,dateReg));     //true
console.log(verifyDate(test2,dateReg));     //false
console.log(verifyDate(test3,dateReg));     //false
console.log(verifyDate(test4,dateReg));     //false

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值