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

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

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

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

废话不多说,直接上代码

      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
};

结束

猜你喜欢

转载自blog.csdn.net/u013282737/article/details/129202822