【问题标题】:Regular Expression for hostname & ip主机名和 ip 的正则表达式
【发布时间】:2016-07-28 09:11:18
【问题描述】:

我正在尝试找到一个正则表达式来验证 IP 地址和 Javascript 中的主机名。

我在这里和其他地方查看了很多帖子,但找不到适合我需要的帖子。

对于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 正则表达式放在一个正则表达式术语中,但由于主机名正则表达式将验证任何无效的 IP 地址,我无法将它们组合起来。

有人知道如何创建一个不会验证无效 IP 地址的主机名正则表达式吗?

编辑:我也找到了这个: http://jsfiddle.net/opd1v7au/2/

但这将验证例如:

::2:3:4:5

我的申请无法接受。


解决方案:感谢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])$

【问题讨论】:

  • 那些要么仅适用于我已经有 2 个工作的 IP,要么不能在主机名上正常工作。 IP-Regex 之类的东西显示为有效,这是错误的。而且您不能将 IP 和主机名组合在一起才能正常工作
  • ipv4 或 ipv6 ip 地址? ::2:3:4:5 是一个有效的 ipv6 地址 (0000:0000:0000:0000:0002:0003:0004:0005)
  • ipv4 暂时。可能是这种情况,但我的应用程序不会接受这种表示法

标签: javascript regex


【解决方案1】:

基于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])$/

【讨论】:

  • 它确实适用于某些主机名,但它也可以验证 IP-REGEXSample 之类的东西
  • 根据 rfc1035,哪些是有效的主机名,localhost 也是如此;你对他们有什么问题?
  • 也许您希望它们以 2-3 个字母的 TLD 结尾?
  • 它们有效吗?这似乎很奇怪。我本来希望其中至少有一个点,例如 test.domain 或 test.tld 或类似的东西
  • 如果您需要至少 2 个标签,请将您的第一个 * 更改为 +。 “互联网域”应该没问题,因为它们都在 TLD 之下。一个众所周知的单标签域名示例是localhost
猜你喜欢
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多