私は個人的な電子メールアカウントをブロックするためにモデルの検証が必要です。拡張子に関係なくすべてのインターネットドメインに一致する正規表現を作る方法
私は次があります。
PERSONAL_DOMAINS = %w[
yahoo.
ymail
verizon
]
正規表現の検証:
:format => {
:without => /#{PERSONAL_DOMAINS.map{|a| Regexp.quote(a)}.join('|')}/
}
理由ヤフーは、最後にドットがyahoo-inc.comを許可しますが、すべての個人のドメインをブロックすることでありyahoo.com、yahoo.fr、yahoo.ukなど...
この正規表現は失敗し、yahoo-inc.comが拒否されてしまいます...これを使用してユースケースを作成する方法上記のpa ss?
/(^|\.)(#{PERSONAL_DOMAINS.map{|a| Regexp.quote(a)}.join('|')})\.[^.]+$/i
これは、第二の成分すべてのドメインと一致しますが、正確に次のいずれかです。
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.">
再現できません。regexは "yahoo-inc.com"と一致しません。 –