3

我在模型中有以下 ruby​​ 代码:

if privacy_policy_link.match(/#{domain}($|\/$)/) errors.add(:privacy_policy_link, 'Link to a specific privacy policy page on your site instead of your homepage.') end

这一直有效,直到用户尝试保存如下所示的隐私政策链接:

https://example.com/about-me/privacy-policy-for-example-com/

目标是我不希望他们为这个隐私政策链接链接到他们的基本主页(example.com 或 www.example.com 等)(出于一些随机的、复杂的原因,我不会讨论)。上面提供的链接应该通过匹配器(这意味着因为他们链接到他们网站上的单独页面,所以它不应该被视为匹配并且他们在保存表单时不应该看到任何错误) - 但因为他们引用了他们的网址后半部分的基本域,它作为匹配出现。

对于我的一生,我无法弄清楚 rubular 上的正确正则表达式如何让这个 url 通过匹配算法。当然,我不能只要求用户重命名他们的隐私政策链接以在最后从其中删除“com”——因为这样:https://example.com/about-me/privacy-policy-for-example会通过。:)

我将非常感谢任何可以帮助我了解如何解决此问题的帮助!

Rubular 链接:http ://rubular.com/r/G5OmYfzi6t

4

1 回答 1

2

您的问题是.字符是任何字符,因此它与-in匹配example-com

如果将其链接到行首,它将正确匹配,而无需尝试.在域中转义。

if privacy_policy_link.match(%r{^(http[s]?://|)(www.)?#{domain}($|/$)})
于 2018-12-18T19:38:55.133 回答