我正在尝试在Javascript中找到一个用于验证IP地址的正则表达式和一个用于主机名的正则表达式。
我在这里和其他地方看了很多帖子,但找不到符合我需要的帖子。
对于IP我发现两个工作正常(不知道除了格式之外是否存在差异):
1 :(这是我首选的IP地址正则表达式)
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
2:
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
对于主机名,我找到了这个:
/^(([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])$/
也可以。
但是^^问题是主机名正则表达式将验证
192.168.178.1111
这不是主机名,这是无效的IP地址。
我想同时兼容主机名和IP regex在一个正则表达式术语中,但由于主机名正则表达式将验证任何无效的IP地址,我无法将它们组合在一起。
有没有人知道如何创建不会验证无效IP地址的主机名正则表达式?
编辑:我也找到了这个: http://jsfiddle.net/opd1v7au/2/但这将验证例如:
::2:3:4:5
我的申请无法接受。
解决方案: thx到Aaron我现在有这个正则表达式似乎有用(目前在测试中)
^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$
组合版本以验证IP地址&主持人->RegExr.com:
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$
答案 0 :(得分:2)
基于this SU answer,我建议进行此修改,接受以数字开头的标签,但顶级域除外:
/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/
答案 1 :(得分:-3)
有些人在面对问题时会想到,我知道,我会使用正则表达式。"现在他们有两个问题。
正如杰弗里弗里德曾说过使用两个简单的不同正则表达式而不是一个复杂的表达式。