ruby-on-rails - 如何制作正则表达式来匹配所有互联网域(无论扩展名如何)

标签 ruby-on-rails ruby regex ruby-on-rails-3

我需要进行模型验证来阻止个人电子邮件帐户。

我有以下内容:

PERSONAL_DOMAINS = %w[
 yahoo.
 ymail
 verizon
]

正则表达式验证:

:format => {
  :without => /#{PERSONAL_DOMAINS.map{|a| Regexp.quote(a)}.join('|')}/
}

yahoo 末尾有一个点的原因是允许 yahoo-inc.com 但阻止所有个人域,如 yahoo.com、yahoo.fr、yahoo.uk 等...

此正则表达式失败并导致 yahoo-inc.com 被拒绝...有关如何更新此以使上述用例通过的任何建议吗?谢谢

最佳答案

尝试在不使用 Rails 的情况下进行匹配,以帮助缩小发生情况的范围:

PERSONAL_DOMAINS_REGEXP = /#{PERSONAL_DOMAINS.map{|a| Regexp.quote(a)}.join('|')}/
=> /yahoo\.|ymail|verizon/

"yahoo-inc.com".match(PERSONAL_DOMAINS_REGEXP)
=> nil

"yahoo.com".match(PERSONAL_DOMAINS_REGEXP)
=> #<MatchData "yahoo.">

关于ruby-on-rails - 如何制作正则表达式来匹配所有互联网域(无论扩展名如何),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003749/

相关文章:

ruby-on-rails - 如何在 Ruby 中按数字选择当年的季度?

java - ant 字符串操作 : extracting characters from a string

ruby-on-rails - 升级到 Rails 5.0.6 后邮件 gem 不发送电子邮件

ruby-on-rails - 如何在运行时从rails应用程序动态编辑routes.rb?

ruby - NameError:声明 mongomapper 文档模型时未初始化常量 ActiveModel::Serializers::Xml

ruby - cucumber 数据工厂,watir

Python从字符串中删除特定的零

regex - 这行Perl毫无意义吗? s/^(\d +)\b/$ 1/sg

ruby-on-rails - 在 env.rb 之外需要 Cucumber-rails。其余的加载被推迟到 env.rb 被调用

ruby-on-rails - 多个服务器上 Rails 中奇怪的 ActiveRecord 时区行为