史上最好用的校验【身份证有效期】的JS方法

5 篇文章 0 订阅

最近有一个需求需要校验输入的身份证有效期的开始和结束日期,

由于是没有使用日期选择框,是直接文本录入的,

因此需要对录入的内容做一些校验,

废话不多说,直接上代码

      let idCardPeriodDate = this.checkIdCardPeriodDate(this.state.idCardPeriodDate);
      if(!idCardPeriodDate){
          return;
      }
      // 校验通过
      this.setState({
          idCardPeriodDate: idCardPeriodDate.replace("至", " 至 "),
      });

校验的方法就在这里:

  checkIdCardPeriodDate(value){
      console.log(value);
      if (checkNull(value, '身份证有效期')) {
        return false;
      }
      let idCardPeriodDate = value.replaceAll(" ", "")
                    .replaceAll(" ", "")
                    .replaceAll("•", "")
                    .replaceAll(".", "")
                    .replaceAll("-", "")
                    .replaceAll("_", "")
                    .replaceAll("/", "")
                    .replaceAll("永久", "长期");
      // 替换后再校验一遍
      if (checkNull(idCardPeriodDate, '身份证有效期')) {
        return false;
      }
      if(idCardPeriodDate.indexOf("至") <0 ){// 没有至
        message.destroy();
        message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");
        return false;
      }
      if(clearAllNoChineseChar(idCardPeriodDate).replaceAll("长期","").length > 1){
        // 有两个以及以上汉字
        message.destroy();
        message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");
        return false;
      }
      if(idCardPeriodDate.indexOf("至") === 0 || idCardPeriodDate.indexOf("至") === (idCardPeriodDate.length -1)){
        // 至在第一或者最后一位
        message.destroy();
        message.error("【身份证有效期】格式必须为【YYYYMMDD 至 YYYYMMDD】");
        return false;
      }
      let startIdDate = idCardPeriodDate.split("至")[0];
      let endIdDate = idCardPeriodDate.split("至")[1];
      console.log("startIdDate", startIdDate);
      console.log("endIdDate", endIdDate);

      console.log("parse", Date.parse(
          startIdDate.substring(0,4)+"-"+startIdDate.substring(4,6)+"-"+startIdDate.substring(6,8)
        ));

      // 校验前半部分
      if(startIdDate.length !==8){
        message.destroy();
        message.error("【身份证有效期】开始日期必须为【YYYYMMDD】格式");
        return false;
      }
      if(isNaN(Date.parse(
          startIdDate.substring(0,4)+"-"+startIdDate.substring(4,6)+"-"+startIdDate.substring(6,8)
      ))){
        message.destroy();
        message.error("【身份证有效期】开始日期有误");
        return false;
      }

      // 校验后半部分
      if(endIdDate !== '长期' && endIdDate.length !==8){
        message.destroy();
        message.error("【身份证有效期】结束日期必须为【YYYYMMDD】格式");
        return false;
      }

      if(endIdDate !== '长期' && isNaN(Date.parse(
        endIdDate.substring(0,4)+"-"+endIdDate.substring(4,6)+"-"+endIdDate.substring(6,8)
      ))){
        message.destroy();
        message.error("【身份证有效期】结束日期有误");
        return false;
      }

      if(endIdDate !== '长期' && startIdDate >= endIdDate){
        message.destroy();
        message.error("【身份证有效期】开始日期必须大于开始日期");
        return false;
      }

      let nowDate = getDate();
      if(startIdDate > nowDate){
        message.destroy();
        message.error("【身份证有效期】开始日期不可大于【"+nowDate+"】");
        return false;
      }

      if(endIdDate !== '长期' && nowDate >= endIdDate){
        message.destroy();
        message.error("【身份证有效期】结束日期必须大于【"+nowDate+"】");
        return false;
      }

      return idCardPeriodDate;
  }
export const getDate = function() {
  const date = new Date(); // 获取时间
  const year = date.getFullYear(); // 获取年
  const month = date.getMonth() + 1; // 获取月
  const strDate = date.getDate(); // 获取日
  return year + getNum(month) + getNum(strDate);
};
export const getNum = function(i) {
  return i < 10 ? '0' + i : i
};

结束

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学编程的司马光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值