2012-12-17 43 views
0

我有這段代碼來驗證電子郵件輸入。我的問題是,我希望我的表單只接受一個特定的域。例如,[email protected]。我不知道如何做到這一點。這是我到目前爲止有:如何驗證來自特定域的電子郵件地址?

function validateEmail(email) 
{ 
    var splitted = email.match("^(.+)@(.+)$"); 
    if (splitted == null) return false; 
    if (splitted[1] != null) 
    { 
     var regexp_user = /^\"?[\w-_\.]*\"?$/; 
     if (splitted[1].match(regexp_user) == null) return false; 
    } 
    if (splitted[2] != null) 
    { 
     var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/; 
     if (splitted[2].match(regexp_domain) == null) 
     { 
      var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/; 
      if (splitted[2].match(regexp_ip) == null) return false; 
     } // if 
     return true; 
    } 
    return false; 
} 
+1

如何abou ta簡單,如果(email.indexOf('@ thisdomainonly')> 0) –

+0

如果這是關於安全性,這是危險的,因爲人們可以很容易地創建一個子域與@ thisdomainonly.com.myrealdomain.com –

回答

4

修改你的函數,你會使用這樣的:

function validateEmail(email) 
{ 
    var splitted = email.match("^(.+)@thisdomainonly\.com$"); 
    if (splitted == null) return false; 
    if (splitted[1] != null) 
    { 
     var regexp_user = /^\"?[\w-_\.]*\"?$/; 
     if (splitted[1].match(regexp_user) == null) return false; 
     return true; 
    } 
    return false; 
} 

但更高效的版本是:

function validateEmail(email){ 
    return /^\"?[\w-_\.]*\"[email protected]\.com$/.test(email);   
} 
+0

'測試'是一個更適當的選擇比'match',但'indexOf'在速度方面可能是最好的。 – RobG

+0

是的,但indexOf只會檢查所需域的存在,而測試也會驗證本地部分。 –

+0

這似乎不適用於我。我也嘗試在我的內聯驗證中附加正則表達式,但它不起作用。你有什麼想法爲什麼? –

2

怎麼樣一個簡單的索引檢查:

 function checkEmail(email, domainName){ 
      if(email.indexOf(domainName) > 0) 
       if((email.indexOf(domainName) + domainName.length) == email.length){ 
        //do regex checking if any 
        return true; 
       } 

      alert('Please enter a valid email for : '+ domainName) 
      return false; 
     }