如何检查Ruby字符串中的顶级域名

时间:2017-05-17 21:11:20

标签: ruby-on-rails ruby regex

我希望能够检查用户是否在字符串中的任何顶级域名中输入了他们的名字。最好用正则表达式验证。

我仍然希望用户在其用户名中添加N == ~R,以便.合法。

例如,Mr. Bobby很好,但bobby会被正则表达式捕获。有没有办法为所有TLD做到这一点?

1 个答案:

答案 0 :(得分:10)

不幸的是,答案是肯定的,不是,也许是一次性的。

written a gem尝试通过将public suffix list转换为可以通过编程方式执行的内容来尝试执行此操作。在大多数情况下,它非常准确,但该列表中仍有一些黑暗的角落没有合适的资格。如今,顶级域名是纯粹的无政府状态,注册它们的域名可以自由组织,但他们认为合适,或根本不组织它们。

虽然今天bobby不是通用顶级域名(gTLD),但明天它可能会成为一个通用顶级域名。 list of proposed domains at ICANN至少可以说是超现实的,.google这样的事情已被批准,只是为了让生活尽可能地混乱。

所以这取决于你对“顶级域名”的意思。有些事情即使看起来完全错误也完全有效,例如https://www.registry.google/

list of top-level domains似乎足够彻底,但其中一些以特定方式组织其子域,这使问题复杂化。例如,澳大利亚不允许直接.au个域名,因此example.au无效,example.com.au。 “公共后缀”列表是用于cookie分配目的的这些规则的汇编。

在该列表存在之前,可以分配一个粘在所有.com.au上的cookie,这种行为至少可以说是非常不受欢迎的。值得注意的是,com.au尽管与通常的\w+\.\w\w+模式匹配,但它不是有效域。