是否可以在rails中检查子域是否属于某个域? 例如:
blog.example.com belongs to example.com ? yes
blog.foo.com belongs to example.com? no
example.com belongs to example.com? yes
我需要深度测试,而不仅仅是类似字符串的测试
答案 0 :(得分:3)
如果关系只是确定子域是否属于另一个域(并且您知道子域和域),则匹配是一个简单的比较。
s1 = 'blog.example.com'
s2 = 'blog.foo.com'
s3 = 'example.com'
s4 = 'blog.counterexample.com'
d = 'example.com'
s1.end_with?(".#{d}") || s1 == d
# => true
s2.end_with?(".#{d}") || s2 == d
# => false
s3.end_with?(".#{d}") || s3 == d
# => true
s4.end_with?(".#{d}") || s4 == d
# => false
否则,如果您需要将子域分解到域中,那么您需要更精细的内容。在这种情况下,我建议您使用公共后缀列表,您可以使用Public Suffix gem。
domain = PublicSuffix.parse("google.com")
# => #
domain.tld
# => "com"
domain.sld
# => "google"
domain.trd
# => nil
domain.domain
# => "google.com"
domain.subdomain
# => nil
作为旁注,Rails背后的语言是Ruby,这是一个Ruby问题,而不是Rails问题。