2011-07-01 2 views
1

答えを探しているImが誰かが追求すべきアンサーではないという事実のために、質問をdownvoteしないでください。私はそれを十分に認識してんだけど、それは私の考えではありません、私はちょうど提供する必要があります:DRegexを使用して特定のメールプロバイダをブロックする

CakePHPでは、私は私のモデルでは、次のdataentryがいる:

'email' => array(
     'email' => array(
      'rule' => array('email',false,'(^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$)') 
     ), 
    ) 

メールルールが一般的ですcakephpのデータ検証では機能し、2番目と3番目の引数はオプションです。 3番目は正規表現です。私は与えられた正規表現の文字列に満足していなかったので、私は自分自身を追加しました。今、Gmail、Hotmail、Yahooのアドレスを除外したい。

これらのアドレスが結果として誤って生成されるように、正規表現を変更するにはどうすればよいですか?私はそれを正しく得ることはできません。

+0

をユーザーを怒らせるしたくないのはなぜ? – ThiefMaster

+1

うーん、すばらしい質問:私はいらないし、それは私の心を壊す。そのことを望む男は、彼のツールを見てみたい人を除外し、emを識別するための実際の電子メールを残していないと思うと思うだけです。 –

+2

ちょうどヒント:私はあなたの正規表現がマッチするものよりはるかに興味深い電子メールアドレスを持つことができると確信しています。 – Piskvor

答えて

5

なぜgmail、hotmail、yahooアドレスを除外したいのですか?これらの住所のうち1つしか持っていない人もたくさんいます。これは悪い考えです。特定の「オーディエンス」をターゲットにしている場合は、代わりに許可ドメインのリストを作成することをおすすめします。

とにかく、ここであなたが既に持っているものよりも短くなってあなたのための機能的な正規表現だ...それを試してみる:

\b[\w\.-][email protected]((?!gmail|googlemail|yahoo|hotmail).)[\w\.-]+\.\w{2,4}\b 
+0

完全に同意しますが、顧客はこの方法を望んでいます:)それで、可能かどうかを知りたいだけです。私の正規表現はこれまでにしか届いていません... –

+0

私の最新の編集はトリックをすべきです..(私はとても汚いです..:D) – tskulbru

+0

これはTrick Serrghiをやった...ありがとう!私の答えを得るために地獄にあなたをドラッグするためにひどく残念なIm:D –

2

これには正規表現を使用しないでください。

適切な解決策は、@のメールアドレスexplode()に宛てて、プレーンな文字列の比較を使用するか、in_array()を使用して、ドメインがブラックリストに登録されているかどうかを確認します。

+0

しかしそれは可能ですか?私はこのようにしたことはありませんでしたが、自分の機能を追加するのではなく、cakephpによって与えられたツールを使いたいと思っています。こうして私はモデルをきれいに保つことができます。 –

+0

[explodeはPHPの組み込み関数です](http://php.net/manual/en/function.explode.php)ので、どのPHPフレームワークでも動作するはずです。 – ewall

関連する問題