记录常用的正则表达式

记录常用的正则表达式

验证密码正则

请输入8-16位包含至少两种:数字、字母、特殊符号的密码

/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z-`=[\];',.~!@#$%^&*()_+|{}:"?]{8,16}$/

请输入8-16位数字和字母组合的密码

/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/

密码为8~16位,至少包含大写字母/小写字母/数字/特殊符号中的三项

/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,16}$/

英文+数字组合,支持纯英文,不能带任何符号

/^(?![0-9]+$)[0-9A-Za-z]{1,30}$/
验证邮箱正则
/^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,5}$/
验证手机号正则
/^1[0-9][0-9]{9}$/
文字高亮匹配
 const getTable = () => {
      state.loading = true
      $http[state.listApi](state.page).then(res => {
        if (res.code === 0) {
          res.data.data.forEach(item => { // 高亮显示
            if (state.searchValue) {
              item.title_html = item.title
              const escapedSearchValue = state.searchValue.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
              const _reg = new RegExp(escapedSearchValue, 'g')
              item.title_html = item.title_html.replace(
                _reg,
                `<span style="color: #00BCA8;">${state.searchValue}</span>`
              )
            } else {
              item.title_html = undefined
            }
          })
          state.tableData = res.data.data
          state.total = res.data.total
          state.loading = false
        }
      })
    }
验证IPV4、IPV6
 /**代码省略**/
 <Form.Item
   label="IP"
   name="ip_config"
  	//自定义检验规则
    rules={[{ required: true }, { validator: checkTextAreaIp }]}
   >
   <TextArea
     style={{ width: '100%' }}
     placeholder="请输入机构IP"
     rows={10}
      />
  </Form.Item> 
  /**代码省略**/

let ipRegex =
    /^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^::([\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:):([\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){2}:([\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){3}:([\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$|^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$|^:((:[\da-fA-F]{1,4}){1,6}|:)$|^[\da-fA-F]{1,4}:((:[\da-fA-F]{1,4}){1,5}|:)$|^([\da-fA-F]{1,4}:){2}((:[\da-fA-F]{1,4}){1,4}|:)$|^([\da-fA-F]{1,4}:){3}((:[\da-fA-F]{1,4}){1,3}|:)$|^([\da-fA-F]{1,4}:){4}((:[\da-fA-F]{1,4}){1,2}|:)$|^([\da-fA-F]{1,4}:){5}:([\da-fA-F]{1,4})?$|^([\da-fA-F]{1,4}:){6}:$/;
  function checkTextAreaIp(rule: any, value: any, callback: any) {
    if (value) {
      const passArr: any = []; // 已经检查通过的IP
      const valueArr = value.split('\n');

      try {
        Array.isArray(valueArr) &&
          valueArr.forEach((ip, index) => {
            const lineText = `${index + 1}行[${ip}]`;
            if (!ip) {
              throw lineText + '不能为空';
            }
            // 校验去重
            if (passArr.indexOf(ip) !== -1) {
              throw lineText + '已重复';
            }
            // 如果有 - ,分开校验
            if (ip.indexOf('-') > -1) {
              const ips = ip.split('-');

              for (let i = 0; i < ips.length; i++) {
                if (!ipRegex.test(ips[i])) {
                  throw (
                    lineText +
                    '请输入正确的IP/IP段。例,192.168.1.1-192.168.1.50'
                  );
                }
              }
              // 将 IP 地址表示从点分十进制转换为一个单一的数字
				function convertIPToNumber(e: any) {
				  return e.split('.').reduce((acc: any, e: any) => {
				    return (acc << 8) + Number(e);
				  }, 0);
				}
			
			 	// 校验前后2个ip的大小关系
              const ip1Number = convertIPToNumber(ips[0]);
              const ip2Number = convertIPToNumber(ips[1]);

              if (ip1Number >= ip2Number) {
                throw lineText + '网段截止IP必须大于网段起始IP';
              }
            } else if (ip.indexOf('/') > -1) {
              const ips = ip.split('/');
              // 校验第一个 ip
              if (!ipRegex.test(ips[0])) {
                throw lineText + '请输入正确的IP/IP段';
              }
              // 校验子网掩码
              if (!ips[1] || isNaN(ips[1])) {
                callback('请输入正确的IP/IP段');
              }
              // 这里把 0 排除掉
              if (ips[1] > 0) {
                throw lineText + '请输入正确的IP/IP段';
              }
            } else if (!ipRegex.test(ip)) {
              throw lineText + '请输入正确的IP/IP段';
            }

            passArr.push(ip);
          });
      } catch (e) {
        callback(e);
      } finally {
        callback();
      }
    } else {
      callback();
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值