0

我想验证表单输入,以便不允许使用 http:// 和 www。哪个正则表达式可以工作?

例如:

允许

google.com

不允许

模型

VALID_DOMAIN_REGEX = ???

验证 :domain, format: { with: VALID_DOMAIN_REGEX }

4

2 回答 2

0

这应该为你做:

/^[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

因此,如果它对您的目的有效,则它不匹配...

于 2013-07-31T09:58:30.363 回答
0

由于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
于 2013-07-31T10:02:28.573 回答