zoukankan      html  css  js  c++  java
  • js 校验ip和ipv6组合正则

    /**
     * Created by (laoshi) on 2020/08/14.
     */
    
    export function validPassword(str) {
      var pwdRegex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,30}')
      if (!pwdRegex.test(str)) {
        return false
      }
      return true
    }
    
    export function checkValidate(value, type, callback) {
      if (value === '' || value === undefined || value === null) return callback()
      if (type === '' || type === undefined || type === null) return callback()
    
      value = value.replace(/,/ig, ',')
    
      const arr = value.split(',')
    
      if (arr === null || arr.length === 0) return '输入校验字符'
      for (var i = 0; i < arr.length; i++) {
        var result = arr[i]
        if (type === 'IP') {
          var regIp = /^([1-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([0-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([0-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([1-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5])$/
          if (result.indexOf('-') === -1 && result.indexOf('*') === -1) {
            checkIpRang(result, callback)
            if (!regIp.test(result)) return callback(new Error('请输入正确的ip:' + result))
          } else if (result.indexOf('*') > 0) {
            regIp = /(2(5[0-5]{1}|[0-4]d{1})|[0-1]?d{1,2})(.(2(5[0-5]{1}|[0-4]d{1})|[0-1]?d{1,2})){2}.+*+/
            if (!regIp.test(result)) return callback(new Error('请输入正确的ip:' + result))
          } else {
            checkIpRang(result, callback)
            regIp = /(2(5[0-5]{1}|[0-4]d{1})|[0-1]?d{1,2})(.(2(5[0-5]{1}|[0-4]d{1})|[0-1]?d{1,2})){2}/
    
            if (!regIp.test(result)) return callback(new Error('请输入正确的ip:' + result))
          }
        } else if (type === 'PORT') {
          var regPort = /^([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])$/
          if (result.indexOf('-') === -1) {
            if (!regPort.test(result)) return callback(new Error('请输入正确的端口:' + result))
          } else {
            const arrPort = result.split('-')
            for (var j = 0; j < arrPort.length; j++) {
              if (!regPort.test(arrPort[j])) return callback(new Error('请输入正确的端口:' + arrPort))
            }
          }
        }
      }
    }
    
    function checkIpRang(result, callback) {
      var reges = /-d+.+/
      var value = result.match(reges)
      if (value !== null) return callback(new Error('请输入正确的ip:' + result))
      var index = result.lastIndexOf('.')
      var lastIp = result.substring(index + 1, result.length)
      var arr = lastIp.split('-')
      if (parseInt(arr[0]) > parseInt(arr[1])) return callback(new Error('请输入正确的ip:' + result))
      for (var i = 0; i < arr.length; i++) {
        if (parseInt(arr[i]) > 255) return callback(new Error('请输入正确的ip:' + result))
        if (parseInt(arr[i]) === 0 || arr[i] === '') return callback(new Error('请输入正确的ip:' + result))
      }
    }
    
    export function validateCombinedIps(value, callback) {
      if (value === '' || value === undefined || value === null) return callback()
      const arr = value.split(/
    /)
      if (arr === null || arr.length === 0) return '输入Ip地址'
    
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] === '' || arr[i === null]) continue
        var result = arr[i]
        checkIp(result, callback)
        if (callback) break
      }
    }
    
    function checkIp(ip, callback) {
      var regIp = /^([1-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([0-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([0-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5]).([1-9]|[1-9]d{1}|1dd|2[0-4]d|25[0-5])$/
    
      var regIpv6 = /((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))[%.+/]?/
    
      if (ip.indexOf('::') === -1) { // 正常ip
        if (ip.indexOf('/') === -1 && ip.indexOf('-') === -1) { // 正常单个ip
          if (!regIp.test(ip)) return callback(new Error('IP地址::' + ip + '不是有效的数值!'))
        } else if (ip.indexOf('/') > 0) {
          const arr = ip.split(///)
          for (var i = 0; i < arr.length; i++) {
            var slantIp = arr[i]
            if (slantIp.indexOf('.') === -1) {
              if (Number(slantIp) < 0 || Number(slantIp > 255)) { return callback(new Error('IP地址::' + slantIp + '不是有效的数值!')) }
            }
            if (!regIp.test(slantIp)) return callback(new Error('IP地址:' + slantIp + '不是有效的数值!'))
          }
        } else if (ip.indexOf('-') > 0) {
          const crossArr = ip.split(/-/)
          if (crossArr.length === 2) {
            var num = compareIP(crossArr[0], crossArr[1])
            if (num === 1) {
              for (var j = 0; j < crossArr.length; j++) {
                var crossIp = crossArr[j]
                if (!regIp.test(crossIp)) return callback(new Error('IP地址::' + crossIp + '不是有效的数值!'))
              }
            } else {
              return callback(new Error('IP地址:' + crossArr[1] + '不是有效的数值!'))
            }
          }
        }
      } else {
        if (ip.indexOf('-') > 0) {
          var ipv6Arr = ip.split(/-/)
          if (ipv6Arr.length === 2) {
            var result = compareIpV6(ipv6Arr[1], ipv6Arr[0])
            if (result > 0) {
              for (var m = 0; m < ipv6Arr.length; m++) {
                if (!regIpv6.test(ipv6Arr[m])) return callback(new Error('IP地址::' + ipv6Arr[m] + '不是有效的数值!'))
              }
            } else {
              return callback(new Error('IP地址:' + ipv6Arr[1] + '不是有效的数值!'))
            }
          }
        } else {
          if (!regIpv6.test(ip)) return callback(new Error('IP地址::' + ip + '不是有效的数值!'))
        }
      }
    }
    
    function compareIpV6(ip1, ip2) {
      ip1 = convert2CompleteIpV6(ip1)
      ip2 = convert2CompleteIpV6(ip2)
      var ip1s = ip1.split(':')
      var ip2s = ip2.split(':')
      for (var i = 0; i < ip1s.length; i++) {
        if (ip1s[i] === '') {
          if (ip2s[i] === '') {
            continue
          } else {
            return -1
          }
        } else {
          if (ip2s[i] === '') {
            return 1
          } else {
            var value1 = parseInt(ip1s[i], 16)
            var value2 = parseInt(ip2s[i], 16)
            if (value1 > value2) {
              return 1
            } else if (value1 < value2) {
              return -1
            } else {
              continue
            }
          }
        }
      }
    }
    
    function convert2CompleteIpV6(ip) {
      var ipV6 = ip
      var index = ip.indexOf('::')
      if (index > 0) {
        var size = 8 - (ip.split(':').length - 1)
        var tmp = ''
        for (var i = 0; i < size; i++) {
          tmp += ':0'
        }
        tmp += ':'
        ipV6 = ip.replace('::', tmp)
      } else if (index === 0) {
        ipV6 = ip.replace('::', '0:0:0:0:0:0:0:')
      }
      return ipV6
    }
    
    function compareIP(ipBegin, ipEnd) {
      var temp1
      var temp2
      temp1 = ipBegin.split('.')
      temp2 = ipEnd.split('.')
      for (var i = 0; i <= 3; i++) {
        if (Number(temp2[i]) < Number(temp1[i])) {
          return -1
        }
      }
      return 1
    }
    
    export function checkValidateIp(value, callback) {
      if (value === '' || value === undefined || value === null) return callback()
      const reg = /^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$/
    
      if (!reg.test(value)) return callback(new Error('请输入正确的ip'))
    }
    
    export function checkValidateMac(value, callback) {
      if (value === '' || value === undefined || value === null) return callback()
      const reg = /^([A-Fa-fd]{2}:){5}[A-Fa-fd]{2}$/
    
      if (!reg.test(value)) return callback(new Error('请输入正确的Mac'))
    }
    
    export function keyupCheck(event, maxNum) {
      event.target.value = event.target.value.replace(/[^d]/g, '')
      if (event.target.value > maxNum) event.target.value = maxNum
      return event.target.value
    }
    

      vue调用:

     

  • 相关阅读:
    队列01--[队列&双端队列&循环队列&双端循环队列]
    LeetCode--[栈]--不定时更新
    栈01--[栈接口设计&&栈应用]
    初等数论初步
    成外国庆集训小记
    图论算法初步
    Are Lights Still On?
    二分答案和三分入门
    SCOI2010 传送带
    微信小程序 菜鸟笔记
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/13524787.html
Copyright © 2011-2022 走看看