2013-02-24 68 views
0

我正在嘗試使用以下腳本檢查電子郵件地址的格式,但在某處我犯了一個錯誤。當我嘗試將reg_1str_1 , str_2, str_3匹配時,我得到了錯誤信息。這是爲什麼 ?嘗試使用RegExp匹配電子郵件地址時犯了什麼錯誤?

var reg_1 = /^[a-zA-Z][0-9_.][@]{1}[a-zA-Z0-9][.]{1}[a-zA-Z0-9]$/; 
var id_1 = "[email protected]"; 
var id_2 = "[email protected]"; 
var id_3 = "[email protected]"; 

document.write(reg_1.test(id_1)); 
document.write("<br/>" + reg_1.test(id_2)); 
document.write("<br/>" + reg_1.test(id_3)); 

回答

2

你似乎誤解字符類符號[...]。例如,[a-zA-Z][0-9_.]表示「字母a-zA-Z,後跟數字0-9或下劃線_或點.」。

我想你想要的是:

var reg_1 = /^[a-zA-Z0-9_.][email protected][a-zA-Z0-9]+\.[a-zA-Z0-9]+$/; 

除確有必要改變,我也進行了一下清理工作:具體而言,我改變[@]只是@(沒有理由把它包在字符類中)和[.]\.(同樣,除了.需要在「點」而不是「任何字符」時才能被轉義),並且我刪除了{1}(因爲這是隱含的)。

(但是請注意,這不是一個通用的電子郵件地址驗證正則表達式。電子郵件地址實際上非常複雜,唯一真正有效的方法是發送電子郵件到它並看看它是否到達!)

+0

對不起,但是'/^[a-zA- Z0-9 _。] + @ [a-zA-Z0-9] + \。[a-zA-Z0-9] + $ /'與我的不同?我還沒有明白。 – 2013-02-24 04:54:20

+0

@SuhailGupta:你明白'[a-zA-Z0-9 _。]'的含義嗎? – ruakh 2013-02-24 04:57:10

+0

是的,我猜。 'a-z'或'A-Z'或'0-9'或'_'或'.' – 2013-02-24 04:58:11

0

不要這樣做。我其實只是寫一篇博客文章,爲什麼這是一個有缺陷的方法:How to (not) Validate an Email Address

總之,這樣的事情應該是綽綽有餘了:

var emailValidation = /[email protected]+\..+/; 
console.log(emailValidation.exec("[email protected]") != null); // Result: "true" 
console.log(emailValidation.exec("www.example.com") != null); // Result: "false" 
+0

你的正則表達式可以進一步縮短爲'/[email protected]+\../' - 因爲你不使用任何錨點...... – nhahtdh 2013-02-24 06:40:47

0

首先,你正在尋找一個字符串開頭的兩個字符後跟一個@符號,並沒有你的電子郵件開始那樣。

相關問題