前端常用正则校验方式

  • Post author:
  • Post category:其他


// 正则校验手机号
export const regPhoneNum = (val) => /^1(3|4|5|6|7|8|9)\d{9}$/.test(val);

// 0-72正整数
export const twoDayHours = (val) => /^72$|^(\d|[1-9]\d)$/.test(val);

// 正则校验数字
export const regNumber = (val) => /^[0-9]*$/.test(val)

// 正则校验大于0的正整数
export const regNumGtZero = (val) => /(^[1-9]\d*$)/.test(val)

// 校验身份证号
export const regID = (id) => {
  // 1 "验证通过!", 0 //校验不通过
  const format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
  // 号码规则校验
  if (!format.test(id)) {
    return { status: 0, msg: '身份证号码不合规' };
  }
  // 区位码校验
  // 出生年月日校验   前正则限制起始年份为1900;
  const year = id.substr(6, 4); // 身份证年
  const month = id.substr(10, 2); // 身份证月
  const date = id.substr(12, 2); // 身份证日
  const time = Date.parse(`${month}-${date}-${year}`); // 身份证日期时间戳date
  const nowTime = Date.parse(new Date()); // 当前时间戳
  const dates = new Date(year, month, 0).getDate(); // 身份证当月天数
  if (time > nowTime || date > dates) {
    return { status: 0, msg: '出生日期不合规' };
  }
  // 校验码判断
  const c = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 系数
  const b = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; // 校验码对照表
  const idArray = id.split('');
  let sum = 0;
  for (let k = 0; k < 17; k++) {
    sum += parseInt(idArray[k], 10) * parseInt(c[k], 10);
  }
  if (idArray[17].toUpperCase() !== b[sum % 11].toUpperCase()) {
    return { status: 0, msg: '身份证校验码不合规' };
  }
  return { status: 1, msg: '校验通过' };
}


// 百分号格式化
export const getPercentageStr = (percentage) => {
  if (!percentage) {
    return `${percentage}%`;
  }
  return `${percentage * 100}%`
}
// 匹配双引号(全局匹配)
// export const DOUBLE_QUOTA_PATTERN = /\\"/g
export const DOUBLE_QUOTA_PATTERN = /[^"]+(?=")/g
export const LETTERS = /[a-zA-Z]/ // 英文
export const IntReg = /^[+]{0,1}(\d+)$/ // 正整数
export const IntRegLen11 = /(^[1-9]\d{0,10}$)|(^0$)/ // 0-11位的正整数和0
export const IntRegLen18 = /(^[1-9]\d{0,17}$)|(^0$)/ // 0-18位的正整数和0
export const IntRegdec = /^-?[1-9]*(\.\d*)?$|^-?0(\.\d*)?$/ // 0-18位的小数或整数
export const IntRegLen4 = /(^[1-9]\d{0,3}$)|(^0$)/ // 0-4位的正整数和0
export const IntRegLen6 = /(^[1-9]\d{0,5}$)|(^0$)/ // 0-6位的正整数和0
export const IntRegLen8 = /(^[1-9]\d{0,7}$)|(^0$)/ // 0-8位的正整数和0
export const MOBILE_PHONE_REG = /^(1[3456789]\d{9})$/ // 移动电话
export const FIXED_PHONE_REG = /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/ // 固定电话
export const PHONE_REG = /(^(1[3456789]\d{9})$)|(^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$)/ // 固定电话 + 移动电话
export const Decimal12 = /(^[1-9]\d{0,3})+(\.\d{1,8})?$/ // 整数0-4位,小数点有0-8位,总长度12
export const PORT_REG = /^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{4}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/ // 端口号
export const CARD_NO = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/ // 身份证号码
export const HPHM_REG = /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳])|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{6}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{5})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{5}[A-HJ-NP-Z0-9挂学警港澳]))$/ // 号牌号码验证
export const ONLY_METTERS_LINE = /^[A-Za-z_]+$/ // 只允许字母和下划线
export const EMAIL = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ // 邮箱验证
export const IP_REG = /^(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9])(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$/ // IPv4地址



版权声明:本文为LRQQHM原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。