2012-01-15 4 views
3

電子メールアドレスの全リストが登録されないように、カスタム検証ルール(またはルールセット)を追加する必要があります。これはすでにサーバー側を実行していますが、フロントエンドの模倣も同様にしたいと考えています。jQuery妥当性確認、無料のメールアドレス(Gmail、Hotmailなど)を防ぐ必要があります

Gmail、Hotmail、ライブメールなど、40から50までの無料メールアカウントがあり、リストのステムの1つを使用する電子メールアドレスを偽と検証する必要があります。

これを行うにはどうすればよいですか?

+3

オフトピックですが、なぜ無料のメールアカウントで登録しないようにしたいのですか? _only_電子メールアドレスが無料の人を知っています。 – nnnnnn

+1

これはビジネス対ビジネスのウェブアプリであり、実際の物理的な会社の従業員/パートナーとして検証されます。例えば、Apple.comのように。 –

+1

OKです。 Yahoo以外の従業員は、Yahooのアドレスを無料で見せるようなアドレスを持っていますか? – nnnnnn

答えて

4

既にサーバー側で実行している場合は、AJAX要求をサーバーに送り返して、同じ検証ロジックを再利用してください。 (クライアントコードはXMLHttpRequestをサーバーに戻し、サーバーの検証ロジックを実行し、クライアントにステータスを返します.HTMLページを再ロードする必要はありません。すでにjQueryを使用していることを示しています。 )

サーバー側のコードでチェックをキャッシュすることができるため、サーバーがクライアントの関与なしで検証するために(おそらくほんの数秒後に)チェックを繰り返すようにすることができますクライアントが送信したものは信頼できません - Firebugなどと思ってください) - サーバはチェックの完全な作業を繰り返す必要はないかもしれません。 (これは、サーバー側の検証に含まれるものが何であるかを正確に知らなくても、最適化するのはあまりにも簡単かもしれません)。

+0

あなたの答えは私よりはるかに優れています。だから私は私を取り除いている。 –

+0

私はこのプロジェクトのサーバー側の人ではないので、XMLHttpRequestにアクセスするためにコードを移動することは、時間的には実現不可能です。しかし私はあなたの考えが好きです。私は多かれ少なかれ粗くて汚い解決策が必要です。 –

+1

@JackMcDade - 無料の電子メールアドレスがどのように決定されるかについての "ルール"はありますか?ドメインのブラックリストと同じくらいシンプルなのでしょうか?これらの要件を前提として、誰かがJavaScriptのみの実装を提供できると確信しています。それ以外の場合は、すでにサーバー上に存在する実装を1つとして利用できるようにすることなく、おそらくサードパーティのWebサービスを呼び出すことができます。 – ziesemer

1

サーバー側の配列同じ値を含むjQuery配列を生成するには、jQueryの.inArray()メソッドを使用してそれを探します。例えばhttp://api.jquery.com/jQuery.inArray/

$('#submit_button').click(function(event){ 
    var emailAddress = $('#email').val(); 
    var emailDomain = emailAddress.substr(emailAddress.search('@') + 1) 

    if (jQuery.inArray(emailDomain, invalidAddresses)) 
    { 
    alert("Invalid Email Address"); 
    event.preventDefault(); 
    } 
}); 
+0

実際のjQueryの検証ルールにどのように変換されるか少し曖昧です。あなたは詳しく説明できますか? –

+0

例を含めるように編集 – njbair

0

なぜあなたはあなたが必要としないすべての電子メールでの国連の配列を作成しないでください。

たとえば、

あなたはすでに、すべての電子メールのリストを持っているか
var email = new Array('Hotmail','Gmail','Yahoo',...,'Live'); 

、配列やJSONファイル、XML、TXT、...、など

次を作ります。関数ハンドラーを正規表現で作成します。

$(function() 

// $('selector').event(function(){ 

function handdlerMail(email){ 
      for(var i = 0; i<email.length; i++){ 
       if(evalEmail(current_value,/^email[i]/g){ 
         // do something 
         } else { // do something } 
      } // end for 
} // End function 

function evalEmail(a,b) { 
     if ((b.test(a))) { 
      return true; 
     } else { 
      return false; 
    } 
} 

}) // end of event 

}) // enf of function 

私は重みのツリー構造でこれを行うためのより良い方法を考えて、 つまりあなたが含まれているツリーを作成することができれば、電子メールはしたくありません。

あなたは対数時間であなたの電子メールを評価している可能性があります。木の重量を歩いて終わりに、あなたはあなたのリストにあるかどうかを決めることができます。

つまり、ツリー内にあるかどうか

+0

'for(i in email)'は使わないでください。 http://stackoverflow.com/questions/500504/javascript-for-in-with-arraysを参照してください。 – ziesemer

+0

ご清聴ありがとうございました。 – exbios