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

时间:2013-12-20 02:13:07

标签: 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})$

1 个答案:

答案 0 :(得分:2)

您有优先权问题。你写的时候

^(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]))$