2

個人のメール アカウントをブロックするには、モデルの検証が必要です。

私は次のものを持っています:

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 が拒否される原因となっています... 上記のユースケースを成功させるためにこれを更新する方法について何か提案はありますか? ありがとう

4

2 に答える 2

2

何が起こっているのかを絞り込むのに役立つように、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.">
于 2012-04-04T01:37:42.267 に答える
0

次の正規表現を試してください。

/(^|\.)(#{PERSONAL_DOMAINS.map{|a| Regexp.quote(a)}.join('|')})\.[^.]+$/i

これは、2 番目のコンポーネントがリストの 1 つであるすべてのドメインに一致します。

したがって、一致します:

yahoo.com
Yahoo.fr
sub.yahoo.id

などですが、そうではありません

yahoo-inc.com
notyahoo.com
yahoo.other.com

(「yahoo.」を「yahoo」に戻します)

末尾の「/i」にも注意してください。ドメインは大文字と小文字を区別しないため、これが必要になります。

于 2012-04-04T10:43:52.407 に答える