2012-10-15 471 views
0

我正在嘗試使用以下JavaScript來驗證正確的電子郵件地址,但在此腳本中出現錯誤。任何人都能看到爲什麼先謝謝你。javascript,電子郵件驗證器腳本

function isEmail(str){ 
    var reg = new RegExp("?:[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])+)\]"); 
    return reg.test(str); 
} 
+1

是什麼錯誤消息? – epascarello

+0

怎麼來的正則表達式模式以'?:'開頭(而不是'(?:')? – raina77ow

+2

除了正確的答案關於非轉義引用字符,你還應該考慮不爲每個測試調用創建一個新的正則表達式對象。 –

回答

0

你有一個未轉義的字符串。每當你打開一個字符串",只要你想"在字符串中,它需要用反斜槓\"轉義。

function isEmail(str){ 
    var reg = new RegExp("?:[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])+)\]"); 
    return reg.test(str); 
} 
0

療法錯誤是,你有一個轉義雙引號

var reg = new RegExp("?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\" .... 
-----------------------------------------------------------------------------------------^ 

注:只需看看你的問題的顏色編碼,你會看到它。也許你的IDE也有顏色編碼。

+0

我已經用非轉義的雙引號解決了這個問題,但仍然沒有工作。任何其他想法? – user1748076

+1

@ user1748076您的字符串中有多個雙引號,嘗試將它們全部轉義 – Ibu

0

電子郵件驗證很容易出錯。因此我建議您使用Verimail.js

爲什麼?

  • 語法驗證(根據RFC 822)
  • IANA TLD驗證
  • 爲最常見的TLD和電子郵件域
  • 拼寫建議
  • 拒絕臨時電子郵件帳戶域,如mailinator.com

很簡單!您的網站上下載幷包括腳本:

https://raw.github.com/comfirm/Verimail.js/master/src/verimail.js

然後使用:

var email = "[email protected]"; 
var verimail = new Comfirm.AlphaMail.Verimail(); 

verimail.verify(email, function(status, message, suggestion){ 
    if(status < 0){ 
     // Incorrect syntax! 
    }else{ 
     // Syntax looks great! 
    } 
}); 

Verimail.js甚至有一個jQuery plugin是很容易使用:

$("input#email-address").verimail({ 
    messageElement: "p#status-message" 
});