记录常用的正则表达式

记录常用的正则表达式

验证密码正则

请输入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();
    }
  }

猜你喜欢

转载自blog.csdn.net/qq_41620887/article/details/132471647