javascript - 使用单个正则表达式验证主机名和 IP 地址

标签 javascript regex validation

<分区>

尝试合并来自 here 的两个正则表达式在单个语句中验证主机名和 IP 地址。

我让它们分开工作,但是当使用 | 组合时,事情变得很奇怪,匹配主机名和 ips 的片段,而不是完整的有效模式,这不是我想要的。我需要一个正则表达式,使用下面的主机名和 IP 模式来匹配主机或 IP 地址。

我在测试每个模式的地方提供了便签本;最后一个是我尝试将它们结合起来,并举例说明正则表达式匹配无效片段。

regex: Host Names

^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))$

regex: IP Address

^((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]?)){3})$

regex: Host name and IPs (不工作)

^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-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]?)){3})$

最佳答案

您遇到了优先问题。当你写的时候

^(regex1)|(regex2)$

它被解释为

(^(regex1))|((regex2)$)

因此任何以有效主机名开头或以 IP 地址结尾的行都可以匹配。一个解决方案是做

^regex1$|^regex2$

结果如下:

^((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]?)){3})$|^((([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))$

关于javascript - 使用单个正则表达式验证主机名和 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695186/

相关文章:

JavaScript 电子邮件验证

javascript - Google Maps API a.lat 不是函数错误

javascript - HTML5 Canvas绘画应用如何实现拖拽?

python - 在 Python coverage.py API 中使用省略标志

java - 如何使用正则表达式分割字符串

java - 检查android应用程序中的空字段

javascript - 通过 javascript 将值传递给 php

javascript - AWS SDK JavaScript : how display upload progress of AWS. S3.putObject?

javascript - 正则表达式在执行 Regex.exec(testString) 时的奇怪行为

php - 在 codeigniter 2.x 中创建自定义回调验证规则