我想验证表单输入,以便不允许使用 http:// 和 www。哪个正则表达式可以工作?
例如:
允许
google.com
不允许
- www.google.com
- http://google.com
- http://www.google.com
模型
VALID_DOMAIN_REGEX = ???
验证 :domain, format: { with: VALID_DOMAIN_REGEX }
我想验证表单输入,以便不允许使用 http:// 和 www。哪个正则表达式可以工作?
例如:
允许
google.com
不允许
模型
VALID_DOMAIN_REGEX = ???
验证 :domain, format: { with: VALID_DOMAIN_REGEX }
这应该为你做:
/^[http\:\/\/|www].*/
例如:
1.9.2p320 :007 > "http://www.google.de".match /^[http\:\/\/|www].*/
=> #<MatchData "http://www.google.de">
1.9.2p320 :008 > "www.google.de".match /^[http\:\/\/|www].*/
=> #<MatchData "www.google.de">
1.9.2p320 :009 > "google.de".match /^[http\:\/\/|www].*/
=> nil
因此,如果它对您的目的有效,则它不匹配...
由于http://
包含如此多的正斜杠,这将是 Ruby 的 %r{} 正则表达式文字语法的一个很好的用途。
def has_forbidden_prefix?(string)
string =~ %r{^(http://|www)}
end
如果字符串不以http://
or开头,这将返回 nil,falsy www
。
如果字符串返回,它将返回 0,truthy(第一个匹配的偏移量)。
您可以使用validate :some_method_name
在模型中调用自定义验证方法,我将其结构如下
model MyThing
validate :no_forbidden_prefix
private
def has_forbidden_prefix?(string)
string =~ %r{^(http://|www)}
end
def no_forbidden_prefix
if has_forbidden_prefix?(uri)
errors.add :domain, 'The URI cannot start with "http://" or "www"'
end
end
end