首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式使用自定义格式验证ip地址

问如何使用正则表达式使用自定义格式验证ip地址
EN

Stack Overflow用户
提问于 2018-03-26 05:16:35
回答 4查看 286关注 0票数 0

我想用自定义格式验证ip地址:

我所期望的格式:ip address - any value - anynumber

上面的格式有四个部分:

  1. ip地址(包含有效的ip地址)
  2. 任何值(包含任何值)
  3. 任何数字(只包含1到3位数字)
  4. 连接部件(包含空格、破折号、空格( - ))

示例:213.39.59.78 - Public3 address.info - 24

​

代码语言:javascript
复制
function customFormat(val) {
  return /^(?=\d+\.\d+\.\d+\.\d+$)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4}$/.test(val);
}
var testFormat = '192.68.35.35';
document.getElementById('regex').innerHTML += testFormat + ' ' + (customFormat(testFormat) ? 'Valid Format!' : 'Invalid Format!');
代码语言:javascript
复制
<ul id="regex"></ul>

​

上面的代码使用了来自here的正则表达式,但是只是验证了ip地址。

如何验证ip地址(如我所期望的格式)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-03-26 05:35:41

以下是一些你可以尝试的东西:

​

代码语言:javascript
复制
function customFormat(val) {
  return /^(?=\d+\.\d+\.\d+\.\d+)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4} - ((?! -).)+ - \d{1,3}$/.test(val);
}
var testFormat = '213.39.59.78 - Public3 address.info - 24';
document.getElementById('regex').innerHTML += testFormat + ' ' + (customFormat(testFormat) ? 'Valid Format!' : 'Invalid Format!');
代码语言:javascript
复制
<ul id="regex"></ul>

​

细目:

Regex:

代码语言:javascript
复制
/^(?=\d+\.\d+\.\d+\.\d+)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4} - ((?! -).)+ - \d{1,3}$/

regex有5个部分,它们几乎就是您列出的部分:

  1. /^
    • 匹配字符串的开头。

​

  1. (?=\d+\.\d+\.\d+\.\d+)(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.?){4}
    • ip地址(包含有效的ip地址)

​

  1. -
    • 连接部件(包含空格、破折号、空格( - ))

​

  1. ((?! -).)+
    • 任何值(包含任何值)
    • 重要:这个部分使用前瞻性,并匹配一个或多个不是连接部分的字符。换句话说,在找到-之前,它将匹配任何东西。

​

  1. -
    • 连接部件(包含空格、破折号、空格( - ))

​

  1. \d{1,3}
    • 任何数字(只包含1到3位数字)

​

  1. $/
    • 绳子的末端。

​

票数 1
EN

Stack Overflow用户

发布于 2018-03-26 05:47:15

​

试试这个..。对我来说很管用

代码语言:javascript
复制
function ValidateIPaddress(ipaddress) 
{
 if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(myForm.emailAddr.value))
  {
    return (true)
  }
  alert("You have entered an invalid IP address!")
  return (false)
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-26 06:03:16

通过解析字符串并测试每个部分,您将更容易遵循代码,并能够根据失败的测试返回错误,例如:

​

代码语言:javascript
复制
function checkIP(s) {
  var t = s.split(' - ');

  // Test number of parts
  if (t.length != 3)
    return 'Error: format must be <IP address> - <string, no "-"> - <1 to 3 digits>: ' + s;

  // Test IP address
  if (!t[0].split('.').every(v => v >= 0 && v <= 255))
    return 'Error: IP address is invalid: ' + t[0];

  // Test trailing number
  if (!/^\d{1,3}$/.test(t[2])) 
    return 'Error: String must end with 1 to 3 digits: ' + t[2];

  // Must be valid
  return 'Valid string';
}

// Some tests
['213.39.59.78 - Public3 address.info - 222',
 '213.39.59.78 - Public3 address.info - 2222',
 '213.39.59.78 - Public3 address.info',
 '213.39.59.788 - Public3 address.info - 222'
].forEach(s => console.log(`Testing "${s}"\n ${checkIP(s)}`));

​

您可能希望抛出错误,而不是只返回带有错误消息的字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49484384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档