2011-08-17 89 views
0

可能重複:
Validate email address in Javascript?電子郵件驗證建議要求

我有電子郵件驗證的javascript:

 //function to check emails 
    function echeck(str) { 
    var at="@" 
    var dot="." 
    var lat=str.indexOf(at) 
    var lstr=str.length 
    var ldot=str.indexOf(dot) 
    if (str.indexOf(at)==-1){ 
    return false; 
    } 

    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){ 
    return false; 
    } 

    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){ 
    return false; } 

    if (str.indexOf(at,(lat+1))!=-1){ 
    return false; } 

    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){ 
    return false; } 

    if (str.indexOf(dot,(lat+2))==-1){ 
    return false; } 

    if (str.indexOf(" ")!=-1){ 
    return false; 
    } 

    return true;      
    } 

它工作正常,但沒有檢查這一個 - > [email protected]####.com

請幫助我檢查電子郵件中額外的spl字符。

問候,

+0

是你尋求的答案不是[這裏](http://stackoverflow.com/questions/46155/validate-email-address-in-javascript)? @Mark Biek毆打了19秒:-( – Xav

+0

螺絲驗證。現在域中有各種奇怪的TLD和非ASCII字符集,超出'* @ *'的任何驗證都是無用的 –

回答

2

您提供的例子不是一個有效的電子郵件地址,至少是因爲####。com不是有效的域名。你真正應該做的是使用正則表達式來檢查電子郵件地址。

正則表達式的最簡單的版本將是

/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/ 

和一個更完整的人會

/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum|xxx)$/ 

和官方RFC2822實施將

/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/ 

而且你會實際檢查電子郵件地址,如下所示:

function echeck(str) 
{ 
    //using the most simple version 
    //substitute for another pattern if more complete matching is required 
    var expr = /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i; 
    return expr.test(str); 
} 

請注意,在JS中進行驗證並不是一個好主意。您應該始終在服務器上執行另一個驗證 - 以防止有人將不良數據傳遞到您的腳本中,並且您很高興使用它。請注意,您無法保證表單將從您的頁面提交。