【问题标题】:Regex that only matches domains name and not subdomains仅匹配域名而不匹配子域的正则表达式
【发布时间】:2014-01-01 08:24:51
【问题描述】:

我想在 REGEX 中只匹配 domain.com 而不是 subdomain.domain.com。

现在我有这个正则表达式

/([0-9a-z-]{2,}\.[0-9a-z-]{2,3}\.[0-9a-z-]{2,3}|[0-9a-z-]{2,}\.[0-9a-z-]{2,3})$/i

但它也匹配子域。所以我想跳过带有子域的域,只处理“正常”的域。

有什么想法吗?谢谢!

编辑:不应跳过 .co.in、.co.uk 等域名。

【问题讨论】:

  • 我不知道我是否可以只使用正则表达式。可能必须使用循环。

标签: regex


【解决方案1】:

这样可以吗?

/^[0-9a-z-]+\.(?:(?:co|or|gv|ac)\.)?[a-z]{2,7}$/i

仅匹配 domain.com

稍作更改,因为将 TLD 限制为最多 3 个字符会占用 .museum 之类的内容,还是有意为之?

如果您真的需要更准确的模式,那将是一个很棒的长模式,而正则表达式可能不是最好的解决方案。如您所见,有many tldseven more two-level-tlds :)

【讨论】:

  • sub.domain.com 匹配一半。
  • 不错!这就是我要找的! Adbhishek Goel 说了一些有趣的话。如何不跳过 .co.in、.co.uk 等域名?
  • 太好了,现在可以正常工作了。现在 subdomain.domain.com 不匹配,但 domain.co.in 匹配!谢谢!
  • @user2914878 这是一个相当松散的模式,根据您的需要进一步定制它,很高兴可以帮助:)
【解决方案2】:

您必须做的第一件事是明确定义域扩展,否则将需要

domain.co.in 作为子域,但它是一个域。

所以你的正则表达式需要有类似 (com|co.in|co.uk|org|org.in...) 的地方

试试这个(久经考验)

 ^[0-9a-z-]+\.(?:\.)?(com|com.au|org|org.in|co|co.uk)$

希望对你有帮助:)

【讨论】:

  • @Dude 第二件事是正则表达式需要有类似 (com|co.in|co.uk|org|org.in...) 的地方:P
  • 听起来像是一个延续,但第三件事呢?还是其他正确答案?
  • 谢谢你们的帮助,很遗憾我还不能代表你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多