【正则校验】输入框的校验规则

可根据输入要求,使用以下校验规则:

一、证件号

(一)第一种:没有校验系数版本

内地身份证、港澳台证件


// 身份证号码校验:验证输入内容是否为“ 18位符合身份证号码规则的数字或X(其中x不区分大小写,若需限制X大写,则删除小写x即可)”
function isID(val: string) {
  return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
    val
  );
}

// 身份证号-输入限制:只能输入数字或Xx
function isInputID(val: string) {
  return val.replace(/[^0-9^X^x]/g, "");
}

// 身份证号码校验(包含港澳台)
function isIDAll(val: string) {
  return /^[a-zA-Z0-9()/]/g.test(val);
}

// 身份证号-输入限制(包含港澳台):只能输入 数字 字母 () /
function isInputIDAll(val: string) {
  return val.replace(/[^a-zA-Z0-9()/]/g, "");
}

(二)第二种:校验系数版本

参考链接:大陆、港澳台身份证、护照、军官证、户口本的正则表达式

1、大陆身份证
idCardValid(id) {
      // 1 "验证通过!", 0 //校验不通过
      var 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;
      var year = id.substr(6, 4),//身份证年
        month = id.substr(10, 2),//身份证月
        date = id.substr(12, 2),//身份证日
        time = Date.parse(month + '-' + date + '-' + year),//身份证日期时间戳date
        now_time = Date.parse(new Date()),//当前时间戳
        dates = (new Date(year, month, 0)).getDate();//身份证当月天数
      if (time > now_time || date > dates) {
        return { 'status': 0, 'msg': '出生日期不合规' }
      }
      //校验码判断
      var c = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);   //系数
      var b = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');  //校验码对照表
      var id_array = id.split("");
      var sum = 0;
      for (var k = 0; k < 17; k++) {
        sum += parseInt(id_array[k]) * parseInt(c[k]);
      }
      if (id_array[17].toUpperCase() != b[sum % 11].toUpperCase()) {
        return { 'status': 0, 'msg': '身份证校验码不合规' }
      }
      return { 'status': 1, 'msg': '校验通过' }
},
2、港澳身份证
	isHKCard(card) {
      // 港澳居民来往内地通行证
      // 规则: H/M + 10位或6位数字
      // 样本: H1234567890
      var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/;
      if (reg.test(card) === false) {
        return { 'status': 0, 'msg': '港澳居民来往内地通行证号码不合规' };
      } else {
        return { 'status': 1, 'msg': '校验通过' };
      }
    },
3、台湾身份证
	isTWCard(card) {
      // 台湾居民来往大陆通行证
      // 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
      // 样本: 12345678 或 1234567890B
      var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/;
      if (reg.test(card) === false) {
        return { 'status': 0, 'msg': '台湾居民来往大陆通行证号码不合规' };
      } else {
        return { 'status': 1, 'msg': '校验通过' };
      }
    },
4、护照
	isPassPortCard(card) {
      // 护照
      // 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
      // 样本: 141234567, G12345678, P1234567
      var reg = /^([a-zA-z]|[0-9]){5,17}$/;
      if (reg.test(card) === false) {
        return { 'status': 0, 'msg': '护照号码不合规' };
      } else {
        return { 'status': 1, 'msg': '校验通过' };
      }
    },
5、军官证
	isOfficerCard(card) {
      // 军官证
      // 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
      // 样本: 军字第2001988号, 士字第P011816X号
      var reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/;
      if (reg.test(card) === false) {
        return { 'status': 0, 'msg': '军官证号不合规' };
      } else {
        return { 'status': 1, 'msg': '校验通过' };
      }
    },
6、户口本
	isAccountCard(card) {
      // 户口本
      // 规则: 15位数字, 18位数字, 17位数字 + X
      // 样本: 441421999707223115
      var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
      if (reg.test(card) === false) {
        return { 'status': 0, 'msg': '户口本号码不合规' };
      } else {
        return { 'status': 1, 'msg': '校验通过' };
      }
    }

二、电话号码

座机、企业座机、移动电话、只能输入数字

 // 座机号码校验:验证输入内容是否为“ 以0开头的3-4位区号、4位或7-8位座机号(区号和座机号之间用“-”连接)”
 // tel 匹配内容、isTel 区号是否必须输入
function isTel(tel: string, isTel: boolean) {
  if (isTel) {
    return /^[0]\d{2,3}-(\d{7,8}|\d{4})$/.test(tel);
  } else {
    return /^([0]\d{2,3}-)?(\d{7,8}|\d{4})$/.test(tel);
  }
}

 // 企业座机号码校验:验证输入内容是否为“ 以400或800开头的10位座机号码(格式例如:400-123-1234)”
function isTelBusiness(tel: string) {
  return /^([4,8][0]{2}-)\d{3}-\d{4}$/.test(tel);
}

// 移动手机号校验:验证输入内容是否为“ 以1开头,第二位为3~9,后面9位为1~9的数字 ”
function isPhone(pone: string) {
  return /^[1][3-9]\d{9}$/.test(pone);
}

// 移动手机号-输入限制:只能输入数字
function isInputPhone(val: any) {
  return val.replace(/[^0-9]/g, "");
}

三、邮箱

 // 邮箱校验:验证输入内容是否为“ 以com|cn|net结尾的邮箱地址 ”
function isEmail(emailInput: string) {
  return /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(com|cn|net)$/.test(emailInput);
}

四、数

 // 自然数校验:验证输入内容是否为“ 自然数(即0、正整数)”
function isNaturalNum(val: string) {
  return /^\d+$/.test(val);
}

 // 非自然数-输入限制:只能输入自然数(即0、正整数)
function isInputNaturalNum(val: string) {
  return val.replace(/[^\d*]+/g, "");
}

 // 整数校验:验证输入内容是否为“ 整数(负整数、0、正整数)”
function isIntegralNum(num: string) {
  return /(^-?[0-9]([0-9]*)$|^-?[0-9]$)/.test(num);
}

 // 正数校验:验证输入内容是否为“ 大于0的数(包含小数,但不包含0)”
function isPositiveNum(num: string) {
  return /^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+|[1-9]+\d*)$/.test(num);
}

 // 负数校验:验证输入内容是否为“ 小于0的数(包含小数,但不包含0)”
function isNegativeNum(num: string) {
  return /^-([1-9]+\d*|[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+)$/.test(num);
}

 // 0或正数(包括小数)校验:验证输入内容是否为“ 0或正数(包括小数)”
function isPositiveNumOr0(num: string) {
  return /^((?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+|[1-9]+\d*)|[0])$/.test(num);
}

 // 正整数校验:验证输入内容是否为“ 大于0的数(不包含0和小数)”
function isPositiveInteger(num: string) {
  return /^[1-9][0-9]*$/.test(num);
}

 // 负整数校验:验证输入内容是否为“ 小于0的数(不包含0和小数)”
function isNegtiveInteger(num: string) {
  return /^-[1-9][0-9]*$/.test(num);
}

 // 浮点数或0 校验:验证输入内容是否为“ 浮点数或0(即,非整数或0)”
function isFloatOr0(num: string) {
  return /^(0|[+-]?((0|([1-9]\d*))\.\d+)?)*$/.test(num);
}

// 浮点数(不包括0)校验:验证输入内容是否为“ 浮点数(即,非整数且不为0)”
function isFloat(num: string) {
  return /^[+-]?((0|([1-9]\d*))\.\d+)?$/.test(num);
}

 // 正浮点数或0 校验:验证输入内容是否为“ 正浮点数或0(即,非整数的正数或0)”
function isPositiveFloatOr0(num: string) {
  return /^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+|0)$/.test(num);
}

 // 正浮点数(不包括0)校验:验证输入内容是否为“ 正浮点数(即,非整数的正数)”
function isPositiveFloat(num: string) {
  return /^(?:[1-9][0-9]*\.[0-9]+|0\.(?!0+$)[0-9]+)$/.test(num);
}

 // 保留2位小数校验:验证输入内容是否为“ 保留两位小数的数(正负0.00都可) ”
function isKeepTwoDecimal(num: string) {
  return /^([+-]?([1-9]*|[0]))(?=.*[.])+(\.\d{2})?$/.test(num);
}

 // 正整数或保留两位小数校验:验证输入内容是否为“ 正整数(不包含0)或保留两位小数的正数(不包括0)”
function isKeepTwoDecimalOrPosInt(num: string) {
  return /^(0|[1-9][0-9]*)+(\.\d{2})?$/.test(num);
}

五、汉字、英文字母、蒙古名、用户名

用户名、汉字、输入限制、英文字母、蒙古名、用户名

 // 用户名校验:验证输入内容是否为“字母或数字”
function isUserName(val: string) {
  return /^[a-zA-Z0-9]{1,}$/.test(val);
}

 // 汉字校验:验证输入内容是否只是“中文汉字”
function isChinese(val: string) {
  return /^[\u4e00-\u9fa5]{1,}$/.test(val);
}

// 限制输入汉字
function isInputChinese(val: string) {
  return val.replace(/[\u4e00-\u9fa5]+/g, "");
}

// 至少包含一个汉字 校验:验证输入内容是否“至少包含一个汉字”
function isChineseAllOf1(val: string) {
  return /[\u4e00-\u9fa5]/g.test(val);
}

// 英文(大小写都可以)校验:验证输入内容是否为“ 英文字母(包含大写或小写)”
function isEnglish(val: string) {
  return /^[a-zA-Z]{1,}$/.test(val);
}

// 大写英文字母校验:验证输入内容是否只是“大写英文字母”
function isEnglishB(val: string) {
  return /^[A-Z]{1,}$/.test(val);
}

// 小写英文字母校验:验证输入内容是否只是“小写英文字母”
function isEnglishS(val: string) {
  return /^[a-z]{1,}$/.test(val);
}

// 蒙古人姓名(重点是·)校验:只能输入1-20位汉字和“·”,且不能以“·”开头
function isMgrName(val: string) {
  return /^([\u4e00-\u9fa5]*)|([\u4e00-\u9fa5][\u4e00-\u9fa5·]*){1,20}$/g.test(val);
}

六、密码、特殊字符

// 密码校验:验证输入内容是否为“6到20位数字+字母的组合(至少包含1个字母和1个数字)”
function isPsw(val: string) {
  return /^(?!([a-zA-Z]+|\d+)$)[a-zA-Z\d]{6,20}$/.test(val);
}

// 密码校验:验证输入内容是否为“6-20位字母或数字”
function isPassWord(val: string) {
  return /^[a-zA-Z\d]{6,20}$/.test(val);
}

// 密码校验:验证输入内容是否为“6到20位数字+字母的组合,且包含至少1个大写字母、1个小写字母、1个数字”
function isPaw(val: string) {
  return /^(?=.*?[a-zA-Z])(?=.*?[0-9])(?=.*?[_\-@&=])[a-zA-Z0-9_\-@&=]{6,20}$/.test(val);
}

// 特殊字符校验:验证输入内容是否为“6-20位特殊字符”
function isSpecial(val: string) {
  return /^[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、]{6,20}$/.test(
    val
  );
}

// 特殊字符输入限制:禁止输入“特殊字符(包括限制字母)”,即只能输入汉字和数字
function isInputForbidColl(val: string) {
  return val
    .replace(
      /[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/g,
      ""
    )
    .replace(/\s/g, "");
}

// 特殊字符输入限制:禁止输入“特殊字符(包括限制字母、数字)”,即只能输入汉字
function isInputOnlyChinese(val: string) {
  return val
    .replace(
      /[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]/g,
      ""
    )
    .replace(/\s/g, "");
}

// 特殊字符输入限制:禁止输入“特殊字符(不限制字母)”
function isInputForbidType(val: string) {
  return val
    .replace(
      /[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、]/g,
      ""
    )
    .replace(/\s/g, "");
}

// 数字\大小写字母\下划线 校验:验证输入内容是否为“数字 or 大小写字母 or 下划线”
function isSpe(val: string) {
  return /^\w+$/.test(val);
}

七、空值

// 空值 校验:验证输入内容是否为“null、undefined、''(若是,则验证通过)”
function isEmpty(val: null | undefined | "") {
  return val === null || val === undefined || val === "";
}

八、网址

 // 网址校验:验证输入内容是否为“协议名为http/https/ftp的完整格式网址”
 // val 匹配内容、isProtocol 协议名是否必填
function isWeb(val: string, isProtocol: boolean) {
  if (isProtocol) {
    var strRegex =
      "^((https|http|ftp|rtsp|mms|ldap|file|news)://){1}" + // 协议名必填
      "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" + //ftp的user@
      "(([0-9]{1,3}.){3}[0-9]{1,3}" + // IP形式的URL- 199.194.52.184
      "|" + // 允许IP和DOMAIN(域名)
      "([0-9a-z_!~*'()-]+.)*" + // 域名- www.
      "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." + // 二级域名
      "[a-z]{2,6})" + // 一级域名- .com or .museum
      "(:[0-9]{1,4})?" + // 端口- :80
      "((/?)|" + // 如果没有文件名,则不需要斜杠
      "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
    var re = new RegExp(strRegex);
    return re.test(val);
  } else {
    var strRegex =
      "^((https|http|ftp|rtsp|mms|ldap|file|news)?://)" + // 协议名可填可不填
      "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" + //ftp的user@
      "(([0-9]{1,3}.){3}[0-9]{1,3}" + // IP形式的URL- 199.194.52.184
      "|" + // 允许IP和DOMAIN(域名)
      "([0-9a-z_!~*'()-]+.)*" + // 域名- www.
      "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." + // 二级域名
      "[a-z]{2,6})" + // 一级域名- .com or .museum
      "(:[0-9]{1,4})?" + // 端口- :80
      "((/?)|" + // 如果没有文件名,则不需要斜杠
      "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
    var re = new RegExp(strRegex);
    return re.test(val);
  }
}

九、IP

 // ip输入校验的验证 只允许输入小数点和数字
function isIp(value: string) {
  return value.replace(/[^0-9.]/g, "");
}

十、其他

// 输入浮点数后两位限制
function isFloatNumber(val: string) {
  if (val === "0。") {
    return "0.";
  }
  if (parseFloat(val) === 0 && val !== "0.") {
    return 0;
  }
  const a = val.replace(/[^0-9.]/g, "").split(".");
  if (a.length >= 2) {
    if (a[1].length > 0) {
      return a[0] + "." + a[1][0];
    } else {
      return a[0] + ".";
    }
  }
  return a[0];
}

// 替换两位数限制的数字
function isInputNumber(value: string) {
  if (parseInt(value) === 0 || !parseInt(value)) {
    return "";
  }
  const numStr = "" + value;
  const num = numStr.substring(0, 2);
  return num.replace(/[^0-9]/g, "");
}

// 限制输入:只能输入非负数(包含小数-小数点后2位)d{0,2}为限制小数点的位数,2代表小数点后2位。
function isInputKeepTwoDecimal(val: string) {
  return val.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, "$1");
}

// 密码必须含有大写字母、小写字母、数字、特殊字符
function complexPassword(val: string) {
	return /^(?=.*?[a-zA-Z])(?=.*?[0-9])(?=.*?[`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、])[a-zA-Z0-9_\`~!@#$%^&*()_\-+=<>?:"{}|,/;'\\[\]~!@#¥%……&*()——+={}?:“”【】、;‘’,。、]{6,20}$/.test(
		val
	);
}

欢迎补充、指正~

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值