美文网首页
Js<常用规则校验或过滤方法>

Js<常用规则校验或过滤方法>

作者: 誰在花里胡哨 | 来源:发表于2021-06-30 09:48 被阅读0次

🌟提供日常开发中的一些js处理数据的方法,包括对数据的过滤,以及对数据的验证等。
也希望大家能留下你好用的方法~~

数据过滤

  • 手机号码隐藏中间4位
  • 保留两位小数
  • 每三位逗号隔开,后面补两位小数,多用于金额数字
  • 银行尾号四位数
  • 数字金额转换为大写人民币汉字的方法
  • 获取Url携带的地址参数
  • 金额以元和万元为单位
  • 隐藏证件号
  • 用户姓名脱敏
  • 账号4位一空格
  • 字符全局替换
  • 日期格式化

数据验证

  • 手机号验证
  • 姓名校验
  • 密码必须为8-18位数,且包含大小写字母和特殊符号
  • 身份证号完整校验
  • 只能输入数字和字母
  • 校验特殊字符

数据过滤

  //手机号码隐藏中间4位
  phoneHideMiddle(val) {
    if (val) {
      return `${val.substring(0, 3)}****${val.substring(val.length - 4)}`
    }
    else {
      return "";
    }
  }
  //保留两位小数
  keepTwoNum(val) {
    val = Number(val);
    return val.toFixed(2);
  },
 //每三位逗号隔开,后面补两位小数,多用于金额数字
  floatThree(value) {
    // console.log(value)
    value = "" + value;
    if (!value) return '0.00';

    // var intPart = Number(value).toFixed(0); //获取整数部分
    var intPart = parseInt(Number(value));//获取整数部分
    // console.log('intPart',intPart)
    var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断
    // console.log('intPartFormat',intPartFormat)

    var floatPart = ".00"; //预定义小数部分
    var value2Array = value.split(".");

    //=2表示数据有小数位
    if (value2Array.length == 2) {
      floatPart = value2Array[1].toString(); //拿到小数部分
      // console.log('floatPart',floatPart)
      if (floatPart.length == 1) { //补0,实际上用不着
        return intPartFormat + "." + floatPart + '0';
      } else {
        return intPartFormat + "." + floatPart;
      }

    } else {
      return intPartFormat + floatPart;
    }
  },
  //银行尾号四位数
  bankCardNumLastFour(val) {
    // val = Number(val);
    if (val) {
      return val.substring(val.length - 4);
    }
  },
//数字金额转换为大写人民币汉字的方法
  convertCurrency(money) {
    //汉字的数字
    var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    //基本单位
    var cnIntRadice = new Array('', '拾', '佰', '仟');
    //对应整数部分扩展单位
    var cnIntUnits = new Array('', '万', '亿', '兆');
    //对应小数部分单位
    var cnDecUnits = new Array('角', '分', '毫', '厘');
    //整数金额时后面跟的字符
    var cnInteger = '整';
    //整型完以后的单位
    var cnIntLast = '元';
    //最大处理的数字
    var maxNum = 999999999999999.9999;
    //金额整数部分
    var integerNum;
    //金额小数部分
    var decimalNum;
    //输出的中文金额字符串
    var chineseStr = '';
    //分离金额后用的数组,预定义
    var parts;
    if (money == '') { return ''; }
    money = parseFloat(money);
    if (money >= maxNum) {
      //超出最大处理数字
      return '';
    }
    if (money == 0) {
      chineseStr = cnNums[0] + cnIntLast + cnInteger;
      return chineseStr;
    }
    //转换为字符串
    money = money.toString();
    if (money.indexOf('.') == -1) {
      integerNum = money;
      decimalNum = '';
    } else {
      parts = money.split('.');
      integerNum = parts[0];
      decimalNum = parts[1].substr(0, 4);
    }
    //获取整型部分转换
    if (parseInt(integerNum, 10) > 0) {
      var zeroCount = 0;
      var IntLen = integerNum.length;
      for (var i = 0; i < IntLen; i++) {
        var n = integerNum.substr(i, 1);
        var p = IntLen - i - 1;
        var q = p / 4;
        var m = p % 4;
        if (n == '0') {
          zeroCount++;
        } else {
          if (zeroCount > 0) {
            chineseStr += cnNums[0];
          }
          //归零
          zeroCount = 0;
          chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
        }
        if (m == 0 && zeroCount < 4) {
          chineseStr += cnIntUnits[q];
        }
      }
      chineseStr += cnIntLast;
    }
    //小数部分
    if (decimalNum != '') {
      var decLen = decimalNum.length;
      for (var i = 0; i < decLen; i++) {
        var n = decimalNum.substr(i, 1);
        if (n != '0') {
          chineseStr += cnNums[Number(n)] + cnDecUnits[i];
        }
      }
    }
    if (chineseStr == '') {
      chineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (decimalNum == '') {
      chineseStr += cnInteger;
    }
    return chineseStr;
  },
  //获取Url携带的地址参数
 // https://juejin.cn/post/6844903666000904205
      var url = "http:www.xxx.net/x/x.html?id=898602B8261890349226&aa=123&bb=456"
      var params = url.split("?")[1].split("&")
      var obj = {}
      params.map(v => obj[v.split("=")[0]] = v.split("=")[1])
      console.log(obj) //{id: "898602B8261890349226", aa: "123", bb: "456"}
 //金额以元和万元为单位
  moneyConvert(num) {
    var newNum = Number(num);
    if (10000 <= newNum) {
      return (newNum / 10000) + '万元'
    } else {
      return newNum + '元'
    }
  },
  //隐藏证件号
  certIdHide(val) {
    if (val) {
      var certId = val.substring(0, 1) + '****************' + val.substring(val.length - 1)
      return certId
    }
  },
  //用户姓名脱敏
  userNameHide(val) {
    if (val) {
      let name;
      if (val.length < 3) {
        name = '*' + val.substring(val.length - 1)
        return name
      } else {
        name = val.substring(0, 1) + '*' + val.substring(val.length - 1)
        return name
      }
    }
  },
 //账号4位一空格
  accountNumberSpace(val) {
    if (val) {
      return val.replace(/\s/g, "")
        .replace(/\D/g, "")
        .replace(/(\d{4})(?=\d)/g, "$1 ");
    }
  }
//字符全局替换
res.data.content = res.data.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto" ')
//日期格式化
function dateFormat(fmt, date) {
    let ret;
    const opt = {
        "Y+": date.getFullYear().toString(),        // 年
        "m+": (date.getMonth() + 1).toString(),     // 月
        "d+": date.getDate().toString(),            // 日
        "H+": date.getHours().toString(),           // 时
        "M+": date.getMinutes().toString(),         // 分
        "S+": date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
        };
    };
    return fmt;
}
...
let date = new Date()
dateFormat("YYYY-mm-dd HH:MM", date)

数据验证

  // 手机号验证
  isvalidPhone(str) {
    const reg = /^1\d{10}$/
    return reg.test(str)
  },
//姓名校验
  isUserName(name) {
    if (name && name.length > 1) {
      const reg = name.match(/^[\u4e00-\u9fa5]+$/)
      return Boolean(reg)
    }
    return false
  },
//密码必须为8-18位数,且包含大小写字母和特殊符号
/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[!~@#$%^&*,\.])[0-9a-zA-Z!~@#$%^&*,\\.]{8,18}$/
 //   * 身份证号完整校验
  // * ***/
  isvalidateIdnumber(value) {
    if (value.length == 18) {
      var Errors = new Array(
        "验证通过!",
        "身份证号码位数不对!",
        "身份证号码出生日期超出范围或含有非法字符!",
        "身份证号码校验错误!",
        "身份证地区非法!"
      );
      var area = {
        11: "北京",
        12: "天津",
        13: "河北",
        14: "山西",
        15: "内蒙古",
        21: "辽宁",
        22: "吉林",
        23: "黑龙江",
        31: "上海",
        32: "江苏",
        33: "浙江",
        34: "安徽",
        35: "福建",
        36: "江西",
        37: "山东",
        41: "河南",
        42: "湖北",
        43: "湖南",
        44: "广东",
        45: "广西",
        46: "海南",
        50: "重庆",
        51: "四川",
        52: "贵州",
        53: "云南",
        54: "西藏",
        61: "陕西",
        62: "甘肃",
        63: "青海",
        64: "宁夏",
        65: "新疆",
        71: "台湾",
        81: "香港",
        82: "澳门",
        91: "国外"
      };
      //身份证号码  idcard
      var Y; //为身份证号码所有数字经过特定算法以后对11取余所得到的数值
      var JYM; //固定数值 校验码的计算中会用到
      var S; //身份证号码所有数字经过特定算法以后所得到的值
      var M; //校验位数值
      var idcard_array = value.split("");
      var ereg;
      //console.log(idcard_array);
      //地区检验
      if (area[parseInt(value.substr(0, 2))] == null) {
        // $.fn.validatebox.defaults.rules.IDNumber.message = Errors[4];
        console.log(Errors[4]);
        return false;
      }


      if (parseInt(value.substr(6, 4)) % 4 == 0 || (parseInt(value.substr(6, 4)) % 100 == 0 && parseInt(value.substr(6, 4)) % 4 == 0)) {
        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
        //闰年出生日期的合法性正则表达式
      } else {
        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
        //平年出生日期的合法性正则表达式
      }
      if (ereg.test(value)) { //测试出生日期的合法性
        //计算校验位
        S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 +
          (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 +
          (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 +
          (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 +
          (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 +
          (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 +
          (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 +
          parseInt(idcard_array[7]) * 1 +
          parseInt(idcard_array[8]) * 6 +
          parseInt(idcard_array[9]) * 3;
        Y = S % 11;
        M = "F";
        JYM = "10X98765432";
        M = JYM.substr(Y, 1); //判断校验位 身份证最后一位为校验位 如果身份证号码正确 则最后一位会与M值相同
        if (M == idcard_array[17]) {
          return true;
        } else {
          console.log(Errors[3]);
          return false;
        }
      } else {
        console.log(Errors[3]);
        return false;
      }
    } else {
      console.log("身份证号码长度不对");
      return false;
    }
  },
//只能输入数字和字母
  isvalidateLetterAndNum(str) {
    const reg = /^[0-9a-zA-Z]+$/;
    console.log(reg.test(str));
    return reg.test(str)
  },
  // 校验特殊字符
  isSpecialChars(str) {
    var regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;
    var regCn = /[·!#¥(——):;“”‘、,|《。》?、【】[\]]/im;
    console.log(regEn.test(str))
    if (regEn.test(str) || regCn.test(str)) {
      return false
    } else {
      return true
    }
  }

相关文章

网友评论

      本文标题:Js<常用规则校验或过滤方法>

      本文链接:https://www.haomeiwen.com/subject/ftyssltx.html