【问题标题】:JavaScript Regular expression for matching domain names (FQDN)用于匹配域名的 JavaScript 正则表达式 (FQDN)
【发布时间】:2019-02-21 19:22:36
【问题描述】:

我需要验证域

有效的场景是

*.domain.com (OR) domain.com (OR) domain.domain.com

无效:

.domain.com(或)*domain.com

字符串开头不能有反斜杠或正斜杠

我曾尝试使用此表达式,但失败了。

^(?:\*\.)(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}

【问题讨论】:

  • 我们生活在一个有over 1500 top-level domains,其中一些是not even in ASCII的时代。你的\.[a-zA-Z]{2,5} 现在不会再删了。
  • 你应该看看 backrefs 来简化什么工作。 regular-expressions.info/backref.htmlregex101.com 玩弄直到你破解它。如果您在这里重新发明轮子,我不会感到惊讶!
  • this怎么样?
  • 应该正则表达式只匹配 域名 (FQDN) 包括通配符 还是匹配 URLs(即 FQDN 加上协议/方案和端口)?也许您还可以描述验证的上下文(应用程序、用例、目的)。

标签: javascript regex domain-name fqdn


【解决方案1】:

regex101.com 上,您可以搜索库。即使没有适合风格 ECMA-Script/JavaScript 的东西,我在 PCRE 中找到了一个:Domain with protocol, Third-Level-Domain, Second-Level-Domain, Top-Level-Domain and Port. 并将其分叉以满足您的需求:

^((\w+)\:\/\/)?(([\w\-]+|\*)\.)*([\w\-]+)\.(\w+)(\:(\d+))?$

更新previous regex (v2) 仅搜索部分,因此也匹配无效示例,因为部分有效。通过添加 begin ^end $ 来修复它。现在正则表达式拒绝无效(*domain.com.domain.com)。

见我的regex (v3) including tests

【讨论】:

  • 修复了正则表达式,使其通过所有 4 个指定的测试用例。请尝试!
猜你喜欢
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多