常用正则

117 阅读5分钟
// 验证中文和数字
/**
 * @param { string } value
 */
export function isCHNAndEN (rule, value, callback) {
  const reg = /^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/g;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if (!reg.test(value)) {
      callback(new Error('仅由英文字母,数字以及下划线组成'));
    } else {
      callback();
    }
  }
};

/*
* 数字,中英文,中横线,下划线,utf-8中文
*
*/ 
export function isValidate (rule, value, callback) {
  const reg = /^[A-Za-z0-9-_\u4e00-\u9fa5]{1,30}$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if (!reg.test(value)) {
      callback(new Error('数字,中英文,中横线,下划线,utf-8中文'));
    } else {
      callback();
    }
  }
};

// 密码校验---验证内容是否包含英文数字以及下划线 
export function validatePasswordOne(rule, value, callback) {
  const reg = /^[_a-zA-Z0-9]+$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if (!reg.test(value)) {
      callback(new Error('仅由英文字母,数字以及下划线组成'));
    } else {
      callback();
    }
  }
}
// 密码校验---字母、数字和标点符号至少包含两种
export const validatePasswordTWo = (rule, value, callback) => {
  if (!value) {
    return callback(new Error('请输入密码'))
  }
  if (!/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/.test(value)) {
    callback(new Error('请输入6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种'))
  } else {
    callback()
  }
}
// 密码校验---必须包含数字、字母、特殊符
export function validatePassWordThree(rule, value, callback) {
  if (value) {
    let reg = /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!<>+@#$%^&*])[\da-zA-Z~!<>+@#$%^&*]{8,}$/; // 基础验证(仅验证格式)
    if (reg.test(value)) {
      callback(); // 校验通过
    } else {
      callback('请输入必须包含数字、字母、特殊符号且大于等于8位(特殊符号包括: ~!<>+@#$%^&*)'); // 校验未通过
    }
  }
  else {
    callback(); // 校验通过
  }
}
// 是否手机号码或者固定座机
export function validatePhoneTwo(rule, value, callback) {
  // const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;
  // const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9})|(\d{7,8}))$/; //座机可不用加区号
  const reg = /^((0\d{2,3}-\\d{7,8})|(1[345789]\d{9})|([(]\d{2,3}[)]\d{7,8})|(\d{7,8}))$/; //座机可不用加区号,区号括号
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的电话号码或者固话号码'));
    } else {
      callback();
    }
  }
}
// 是否固定座机
export function validateTelphone(rule, value, callback) {
  const reg = /0\d{2,3}-\d{7,8}/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的固定电话)'));
    } else {
      callback();
    }
  }
}
// 是否手机号码
export function validatePhone(rule, value, callback) {
  const reg = /^[1][3-9][0-9]{9}$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的电话号码'));
    } else {
      callback();
    }
  }
}
// 是否身份证号码
export function validateIdNo(rule, value, callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的身份证号码'));
    } else {
      callback();
    }
  }
}
// 是否身份证号码--比前两个精准
export function validateIdTree(sId){
  var aCity={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:"国外"}
  var iSum = 0;
  if (!/^\d{17}(\d|x)$/i.test(sId)) return "你输入的身份证长度或格式错误";
  sId = sId.replace(/x$/i, "a");
  if (aCity[parseInt(sId.substr(0, 2))] == null) return "你的身份证地区非法";
  sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
  var d = new Date(sBirthday.replace(/-/g, "/"));
  if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return "身份证上的出生日期非法";
  for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
  if (iSum % 11 != 1) return "你输入的身份证号非法";
  //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次还可以判断出输入的身份证号的人性别
  return true;
}
// 是否身份证号码
export function validateIdTwo(rule, value, callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    const arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子
    const arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码
    if (/^\d{17}\d|x$/i.test(value)) { //判断身份证是否满足18位
      let sum = 0, idx;
      for (let i = 0; i < value.length - 1; i++) {
        // 对前17位数字与权值乘积求和
        sum += parseInt(value.substr(i, 1), 10) * arrExp[i];
      }
      // 计算模(固定算法)
      idx = sum % 11;
      // 检验第18位是否与校验码相等
      if (arrValid[idx] == value.substr(17, 1).toUpperCase()) {
        callback();
      } else {
        callback(new Error('请输入正确的身份证号码'));
      }
      // return arrValid[idx] == value.substr(17, 1).toUpperCase();
    } else {
      callback(new Error('请输入正确的身份证号码'));
    }
  }
}
// 是否邮箱
export function validateEMail(rule, value, callback) {
  /*
    以下验证邮箱如:
    christiana.zhang@mft.net.nz
    parep.chengdu@yahoo.com
    lujia.zhang@diplomatie.gouv.fr

  // const reg= /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
  // const reg = /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?$/;
  */
  const reg = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if (!reg.test(value)) {
      callback(new Error('请输入正确的邮箱'));
    } else {
      callback();
    }
  }
}
// 自定义非法字符验证
export function IllegalVerification(data) {
  let reg = /\bselect\b|\bupdate\b|\bdelete\b|\btruncate\b|\bjoin\b|\bunion\b|\bexec\b|\binsert\b|\bdrop\b|\bcount\b|'|"|;|>|<|%/i
  if (reg.test(data)) {
    callback(new Error("请勿输入以下非法字符:select|update|delete|truncate|join|union|exec|insert|drop|count|'|\"|;|>|<|%"));
  } else {
    callback();
  }
}
// 检验1-2000之间数值的范围
export function checkMax20000(rule, value, callback) {
  if (value == '' || value == undefined || value == null) {
    callback();
  } else if (!Number(value)) {
    callback(new Error('请输入[1,20000]之间的数字'));
  } else if (value < 1 || value > 20000) {
    callback(new Error('请输入[1,20000]之间的数字'));
  } else {
    callback();
  }
}
// 验证数字输入框最大数值
export function checkMaxVal(rule, value, callback) {
  if (value < 0 || value > 最大值) {
    callback(new Error('请输入[0,最大值]之间的数字'));
  } else {
    callback();
  }
}
// 验证是否整数
export function isInteger(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'));
    } else {
      const re = /^[0-9]*[1-9][0-9]*$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入正整数'));
      } else {
        callback();
      }
    }
  }, 0);
}
// 验证是否整数,非必填
export function isIntegerNotMust(rule, value, callback) {
  if (!value) {
    callback();
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入正整数'));
    } else {
      const re = /^[0-9]*[1-9][0-9]*$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入正整数'));
      } else {
        callback();
      }
    }
  }, 1000);
}
// 验证是否是[1-100]的小数,即不可以等于0
export function isBtnOneToHundred(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (!Number(value)) {
      callback(new Error('请输入整数,值为[1,100]'));
    } else {
      if (value < 1 || value > 100) {
        callback(new Error('请输入整数,值为[1,100]'));
      } else {
        callback();
      }
    }
  }, 100);
}
// 验证中文
export function validateChinese(rule, value, callback) {
  const reg = /[\u4e00-\u9fa5]/;
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请正确输入中文'));
    } else {
      callback();
    }
  }
}
// 验证中文
export function validateContacts(rule, value, callback) {
  if (!value) {
    return callback(new Error('请输入中文'))
  }
  if (!/^[\u0391-\uFFE5A-Za-z]+$/.test(value)) {
    callback(new Error('不可输入特殊字符'))
  } else {
    callback()
  }
}
// 纯数字(整数)校验
export function validateNumber(rule, value, callback) {
  let numberReg = /^\d+$|^\d+[.]?\d+$/;
  // let number =  /(^[0-9]*$)|(^0$)/ ;
  if (value !== '') {
    if (!numberReg.test(value)) {
      callback(new Error('请输入数字'))
    } else {
      callback()
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 验证两位小数
export function validateTwoDecimal(rule, value, callback) {
  let numberReg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
  // let numberReg = /^0{1}([.]\d{1,1})?$|^[1-9]\d*([.]{1}[0-9]{1,1})?$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('最多两位小数!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
//验证数字和字母
export function validateNumberLetter(rule, value, callback) {
  let numberReg = /^[0-9a-zA-Z]+$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入数字和字母!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
//微信验证
export function validateWeChat(rule, value, callback) {
  let numberReg = /^([a-zA-Z]{1}[-_a-zA-Z0-9]{5,19})+$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入住正确的微信号!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
//QQ号验证
export function validateQQ(rule, value, callback) {
  let numberReg = /^[1-9][0-9]{4,11}$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入住正确的QQ号!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 验证端口是否在[0,65535]之间
export function validateIsPort(rule, value, callback) {
  if (!value) {
    return callback(new Error('输入不可以为空'));
  }
  setTimeout(() => {
    if (value == '' || typeof (value) == undefined) {
      callback(new Error('请输入端口值'));
    } else {
      const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入在[0-65535]之间的端口值'));
      } else {
        callback();
      }
    }
  }, 100);
}
// 验证端口是否在[0,65535]之间,非必填,isMust表示是否必填
export function validateIsCheckPort(rule, value, callback) {
  if (!value) {
    callback();
  }
  setTimeout(() => {
    if (value == '' || typeof (value) == undefined) {
      //callback(new Error('请输入端口值'));
    } else {
      const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
      const rsCheck = re.test(value);
      if (!rsCheck) {
        callback(new Error('请输入在[0-65535]之间的端口值'));
      } else {
        callback();
      }
    }
  }, 100);
}
// 小写字母
export function validateLowerCase(value) {
  const reg = /^[a-z]+$/;
  if (value !== '') {
    if (reg.test(value)) {
      callback(new Error('请输入小写字母'));
    } else {
      callback();
    }
  } else {
    callback(new Error('请输入小写字母'));
  }
}
// 是否大写字母
export function validateUpperCase(value) {
  const reg = /^[A-Z]+$/;
  if (value !== '') {
    if (reg.test(value)) {
      callback(new Error('请输入大写字母'));
    } else {
      callback();
    }
  } else {
    callback(new Error('请输入大写字母'));
  }
}
// 是否大小写字母
export function validateAlphabets(value) {
  const reg = /^[A-Za-z]+$/;
  if (value !== '') {
    if (reg.test(value)) {
      callback(new Error('请输入大小写字母'));
    } else {
      callback();
    }
  } else {
    callback(new Error('请输入大小写字母'));
  }
}
// 火车车次
export function validateTrain(value) {
  let numberReg = /^[GCDZTSPKXLY1-9]\d{1,4}$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的车次!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 是否合法IP地址
export function validateIP(rule, value, callback) {
  if (value == '' || value == undefined || value == null) {
    callback();
  } else {
    const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
    // const reg=/((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/;
    if ((!reg.test(value)) && value != '') {
      callback(new Error('请输入正确的IP地址'));
    } else {
      callback();
    }
  }
}
// 合法url
export function validateURLOne(url) {
  // let urlRegex = /(HTTP:|HTTPS:|FTP:|FILE:|https:|http:|ftp:|rtsp:|igmp:|file:|rtspt:|rtspu:)\/[-a-zA-Z0-9+&@#\/%?=()~_|:.]*[-a-zA-Z0-9+&@#\/%=~_|]/g;
  const urlRegex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  // return urlRegex.test(url);
  if (urlRegex.test(data)) {
    // return null;
    callback();
  } else {
    callback(new Error('请输入正确的url格式'));
  }
}
// 必须带端口号的网址(或ip)
export function validateUrlTwo(value) {
  let numberReg = /^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的车次!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 网址
export function validateUrlTree(value) {
  let numberReg = /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的网址!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 网址(url,支持端口和"?+参数"和"#+参数)
export function validateUrlFour(value) {
  let numberReg = /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的网址!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 统一社会信用代码
export function socialCode(value) {
  let numberReg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/;
  if (value !== '') {
    if (numberReg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的社会信用代码!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// html验证
export function validateHtml(value) {
  let reg = /<("[^"]*"|'[^']*'|[^'">])*>/;
  if (value !== '') {
    if (reg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的HTML!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}
// 日期时间验证 /d{4}-/d{2}-/d{2}$/.test('2020-10-10')
export function validateDate(value) {
  // let reg =/^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/;  //校验 YYYY/MM/DD
  let reg = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(value) || /^(\d{4})\-(\d{2})\-(\d{2})$/;
  if (value !== '') {
    if (reg.test(value)) {
      callback()
    } else {
      callback(new Error('请输入正确的日期!'))
    }
  } else {
    callback(new Error('请输入值'))
  }
}


// js 正则 去掉小数 或整数 前面多余的0

export function removeZero(value) {
  value.toString();
  value=value.replace(/^0+/,"");
  let num='';//整数
  if(value.toString().split(".")[0]==""){
    return '0'+value
  }else{
    return value
  }
  // return value.replace(/\b(0+)/gi,"")
}