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}|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d{1}|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d{1}|1\d\d|2[0-4]\d|25[0-5])\.([1-9]|[1-9]\d{1}|1\d\d|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(/\n/) 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}|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d{1}|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d{1}|1\d\d|2[0-4]\d|25[0-5])\.([1-9]|[1-9]\d{1}|1\d\d|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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[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}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|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-f\d]{2}:){5}[A-Fa-f\d]{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调用: