首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于检查IP地址的javascript正则表达式

用于检查IP地址的javascript正则表达式
EN

Stack Overflow用户
提问于 2010-12-16 20:08:21
回答 22查看 139.9K关注 0票数 68

我有几个ip地址,例如:

  1. 115.42.150.37
  2. 115.42.150.38
  3. 115.42.150.50

如果要搜索所有3个ip地址,我应该编写哪种类型的正则表达式?例如,如果我使用115.42.150.* (我将能够搜索所有3个ip地址)

我现在能做的是:/[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/,但它似乎不能很好地工作。

谢谢。

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2010-12-16 20:15:58

您得到的正则表达式已经存在几个问题:

首先,它包含点。在regex中,点的意思是“匹配任何字符”,您只需要匹配一个实际的点。为此,您需要对其进行转义,因此在点前加一个反斜杠。

其次,但您可以在每个部分中匹配任意三位数字。这意味着您将匹配0到999之间的任何数字,这显然包含许多无效的IP地址号码。

这可以通过使数字匹配更复杂来解决;这个网站上有其他答案解释了如何做到这一点,但坦率地说,这不值得努力--在我看来,你最好用点来分割字符串,然后只验证这四个块是否为数字整数范围--即:

代码语言:javascript
复制
if(block >= 0 && block <= 255) {....}

希望这能有所帮助。

票数 31
EN

Stack Overflow用户

发布于 2014-12-12 08:31:18

可能会迟到,但有人可以试试:

有效IP地址的示例

代码语言:javascript
复制
115.42.150.37
192.168.0.1
110.234.52.124

无效IP地址示例

代码语言:javascript
复制
210.110 – must have 4 octets
255 – must have 4 octets
y.y.y.y – only digits are allowed
255.0.0.y – only digits are allowed
666.10.10.20 – octet number must be between [0-255]
4444.11.11.11 – octet number must be between [0-255]
33.3333.33.3 – octet number must be between [0-255]

用于验证IP地址JavaScript代码

代码语言: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(ipaddress)) {  
    return (true)  
  }  
  alert("You have entered an invalid IP address!")  
  return (false)  
}  
票数 124
EN

Stack Overflow用户

发布于 2014-10-19 07:19:16

试试这个,它是一个更短的版本:

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

解释:

代码语言:javascript
复制
^ start of string
  (?!0)         Assume IP cannot start with 0
  (?!.*\.$)     Make sure string does not end with a dot
  (
    (
    1?\d?\d|   A single digit, two digits, or 100-199
    25[0-5]|   The numbers 250-255
    2[0-4]\d   The numbers 200-249
    )
  \.|$ the number must be followed by either a dot or end-of-string - to match the last number
  ){4}         Expect exactly four of these
$ end of string

浏览器控制台的单元测试:

代码语言:javascript
复制
var rx=/^(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/;
var valid=['1.2.3.4','11.11.11.11','123.123.123.123','255.250.249.0','1.12.123.255','127.0.0.1','1.0.0.0'];
var invalid=['0.1.1.1','01.1.1.1','012.1.1.1','1.2.3.4.','1.2.3\n4','1.2.3.4\n','259.0.0.1','123.','1.2.3.4.5','.1.2.3.4','1,2,3,4','1.2.333.4','1.299.3.4'];
valid.forEach(function(s){if (!rx.test(s))console.log('bad valid: '+s);});
invalid.forEach(function(s){if (rx.test(s)) console.log('bad invalid: '+s);});
票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4460586

复制
相关文章

相似问题

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