2012-01-15 45 views
3

我需要添加一個自定義驗證規則(或一組規則)以防止註冊整個電子郵件地址列表。這已經在運行服務器端,但我們也希望前端模仿這一點。jQuery驗證,需要防止免費的電子郵件地址(例如Gmail,Hotmail)

我有40或50個免費電子郵件帳戶(例如Gmail,Hotmail,Live郵件等)的大量陣列,並且需要使用來自列表的其中一個詞幹驗證爲FALSE的任何電子郵件地址。

我該如何去做這件事?

+3

偏離主題,但爲什麼你想要防止人們註冊一個免費的電子郵件帳戶?我知道只有_only_電子郵件地址是免費的人。 – nnnnnn 2012-01-15 05:36:38

+1

這是一個企業到企業的網絡應用程序,涉及作爲一個真正的實體公司的員工/合作伙伴進行驗證。例如,像Apple.com一樣。 – 2012-01-15 05:52:15

+1

好,夠公平的。例如,雅虎的員工的地址與雅虎的免費地址有什麼不同? – nnnnnn 2012-01-15 06:00:52

回答

4

如果您已經有了這個正在運行的服務器端,只需將一個AJAX請求發送回您的服務器以重用相同的驗證邏輯即可。 (您的客戶端代碼將使XMLHttpRequest返回到服務器,服務器的驗證邏輯運行並將狀態返回給客戶端 - 所有這些都不需要重新加載HTML頁面。您已經指出您正在使用jQuery,所以這應該很容易)。

作爲額外的好處,您的服務器端代碼可以緩存支票 - 以便當服務器重複檢查(可能只是幾秒鐘後)以進行驗證而無需客戶參與(安全性所必需的,因爲客戶發送的任何東西都不可信 - 比如Firebug等) - 服務器可能不需要重複檢查的全部工作。 (這可能太微不足道,無法優化,不知道你的服務器端驗證包含什麼,如果它包括任何外部調用Web服務等,它可能是值得緩存的。)

+0

你的回答比我的好得多;所以我正在擺脫我的。 – 2012-01-15 05:05:05

+0

我不是這個項目中的服務器端的人,所以移動他們的代碼來訪問XMLHttpRequest在我所擁有的時間框架中是不可行的。但我喜歡你的想法。我需要一個或多或少粗糙和骯髒的解決方案。 – 2012-01-15 05:32:13

+1

@JackMcDade - 你有關於如何確定免費電子郵件地址的「規則」嗎?也許它和域名黑名單一樣簡單?鑑於這些要求,我確定有人可以提供僅限於JavaScript的實現。否則,您可能會調用第三方Web服務,而無需將服務器上已有的實現作爲一個整體提供。 – ziesemer 2012-01-15 05:35:53

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驗證規則有點模糊。你能詳細說明一下嗎? – 2012-01-15 05:32:52

+0

編輯爲包含示例 – njbair 2012-01-15 06:02:17

0

爲什麼你不取消陣列,你並不需要所有的電子郵件。

例如。

var email = new Array('Hotmail','Gmail','Yahoo',...,'Live'); 

你怎麼已經有了所有的電子郵件列表,使一個數組或JSON文件,XML,TXT,...等

下一步。用正則表達式創建一個函數handdler。

$(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(我在電子郵件中)'。請參閱http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays。 – ziesemer 2012-01-15 14:14:48

+0

非常感謝您的澄清。 – exbios 2012-01-15 20:18:33