【发布时间】:2012-11-06 20:15:44
【问题描述】:
我有一个正则表达式可以检测字符串何时不是给定的模式:
/\A((?!.*(www|http|@|\.com\b|\.net\b|\.de\b|\.info\b)).*)$/m
这意味着像“hi you at www.test.com”这样的字符串是 FALSE 但现在我想允许一个 URL:www.example.com。
意思是:
“这是一个测试”> 是的
“这是一个测试www.example.com” > TRUE
“这是一个测试example.com这个”> TRUE
“这是一个测试www.test.com这个” > FALSE
“这是一个测试 test.com this” > FALSE
“这是一个测试 test.com 这个 www.example.com ” > FALSE(错误,因为存在一个禁止的 URL)
看来我需要包含一个 AND 运算符,我认为是:
(?=.*PATTERN)
但不幸的是我无法让它工作。
ps:我知道这个检测url的正则表达式一点也不完美,但是因为我的要求,总比没有好。
谢谢!
编辑: 我的正则表达式位于验证器中:
def self.validates_is_url_and_email_free(*attr_name)
validates_format_of attr_name, {:with => /\A((?!.*(www|http|@|\.com\b|\.net\b|\.de\b|\.info\b)).*)$/m, :message => I18n.t(:not_url_email)}
end
【问题讨论】:
-
这场比赛你在做什么?为什么不提取 URI 然后对其进行二次操作呢?
gsub和scan可能会有所帮助。当你想要一个肯定的时候,你使用否定断言?!似乎很奇怪。 -
What's a good way to validate links (urls) in rails 3? 的可能副本——那里有一些不涉及 Rails 的好主意。