2012-04-25 24 views
2

我想驗證HTML格式的電子郵件地址。我對正則表達式知之甚少。javascript正則表達式 - 我的非常簡單的正則表達式有什麼不對?

驗證非常簡單,只是爲了匹配[email protected]_symbols.two_to_eight_symbols模式。

這是我試圖使用的正則表達式^[email protected]+\..{2,8}$。但它不起作用,它驗證模式[email protected]_symbols

注意:不要擔心這種簡單的驗證,在服務器端我正在做filter_var(php)並將令牌發送到該電子郵件。只需要啓用表單按鈕時inputed電子郵件地址適合一些穩健型:)

編輯這些模式「any_symbols ......」我在問題中提到的是什麼,我想剛纔輸入的文字表述。這不是我在輸入字段中鍵入:)通常我輸入 「[email protected]」,或 「[email protected]」 等:)

EDIT2實際工作代碼:

var email_regex = new RegExp("^[email protected]+\..{2,8}$"); 
if ($target.val().match(email_regex) !== null){ 
    $button.removeAttr('disabled').removeClass('disabled'); 
} 
else{ 
    $button.attr('disabled', 'disabled').addClass('disabled'); 
} 

EDIT3 * 發現問題了! *這不是正則表達式本身,這是我如何傳遞的正則表達式的正則表達式的功能...它應該是

new RegExp(/^[email protected]+\..{2,8}$/); 

不是

new RegExp("^[email protected]+\..{2,8}$"); 

正如我已經說過這整個事情的正則表達式是相當新的給我:))

+1

在我的瀏覽器,'/^[email protected]+\..{2,8}$/.test("[email protected]_symbols 「)'是'false': - ? – 2012-04-25 14:40:20

+0

嘗試''[email protected]_symbols'.match('^。+ @。+ \ .. {2,8} $');' – egis 2012-04-25 14:48:37

+0

更新我的問題。同樣根據https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match「如果沒有匹配,該方法返回'null'。」。 – egis 2012-04-25 14:56:33

回答

1

一個真正的電子郵件地址的正則表達式並不十分簡單,因爲它應該符合RFC標準。

但是,如果這對你的作品,我已經沒有任何問題使用它:

// The regex: /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/ 

// To test it: 
var regex = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/); 

if(regex.test(your_string)){ ... } // returns true if valid 

如果你真的需要接受任何符號,您可以使用Birei張貼的正則表達式。

+0

我自己發現了這個問題,它不是正則表達式,但我接受了你的答案,因爲你給出了翔實的答案並提高了你的聲望得分;)謝謝! – egis 2012-04-25 15:04:26

+0

我更喜歡原始表達。至少,它會接受國際化域名(IDN)。 – 2012-04-25 15:11:00

+0

阿爾瓦羅,你是對的。這一個不會接受日本或任何其他符號。我從來沒有想過。謝謝你。也許這個線程會工作:http://stackoverflow.com/questions/46155/validate-email-address-in-javascript – lu1s 2012-04-25 18:36:57

1

不是一個JavaScript專家,但你的[email protected]_symbols.two_to_eight_symbols定義,我認爲這可能是工作:

^[^@][email protected][^.]+\..{2,8}$ 
+0

它與我的正則表達式不同,但仍然匹配相同的模式。我的意思是它也匹配'any_symbols @ four_symbols'而不是'any_symbols @ any_symbos.2_to_8_symbols' – egis 2012-04-25 14:51:27

+0

對不起,你的正則表達式是正確的,但我希望你不要介意我會接受lu1s的回答,因爲他沒有那麼多信譽評分,因爲你:)謝謝! – egis 2012-04-25 15:03:37

+0

@egis:很高興我們解決了您的問題。 – Birei 2012-04-25 15:06:19

1

你需要躲避斜線:

'[email protected]_symbols'.match('^[email protected]+\\..{2,8}$'); 
             ^^ 

否則,JavaScript的讀取\.爲未知轉義序列和ignores the slash

對於字符未列出[...]前一個反斜槓 忽略,但此用法已被棄用,應予以避免。

(媽的,這是很難被發現...)

相關問題