2012-10-22 98 views
1

我有這個作爲我的正則表達式:正則表達式if語句

var email = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 

這是我的if語句:

if($('#email').val() ==""){ 
    $('#emailErrorMsg').text("Please enter a valid email address."); 
} 
else if(!email.test('#email')) { 
    $('#emailErrorMsg').text("OK"); 
} 
else($('#emailErrorMsg').text("Please enter a valid email address.")); 
}); 

當我在一個有效的電子郵件地址鍵入它說「OK」 。但是,如果我僅輸入一些文本,例如當我想要說「請輸入有效的電子郵件地址」時,它仍然會顯示「確定」。任何人的想法。順便說一下,我仍然是這個東西的一名成員!

+1

'+'是電子郵件地址中的有效字符。一些tlds超過4個字符(例如'.museum')。 – huon

+2

爲什麼'?'在最後?整個模式似乎是可選的。 「匹配所有這些......不然。」 – Wiseguy

回答

0

有一個在你的正則表達式一個小錯字。試試這個:

var email = /^([\w-\.]+)@([\w-]+\.)+[\w-]{2,6}?$/; 

這也應該處理.museum情況

+0

這就是正則表達式的這一部分應該處理的內容:@([\ w - ] + \。)+任意字母或破折號,後跟一個句點,一次或多次,其中包括mail.domain。com – raykendo

1

驗證電子郵件是。完全正確的正則表達式是一個真正的怪物,你可以看到(如果你敢的話)http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html其中可能是不是你想要的。

相反,你有幾個選擇。使用匹配99%電子郵件的正則表達式,在服務器端使用電子郵件驗證庫,或者實現有限狀態機來正確分析它。狀態機可能過於笨重(儘管允許整潔的東西像建議可能的拼寫錯誤)並將其全部用於服務器端 - 無論如何,您最好還是這樣做(如果某人的JavaScript被禁用了,該怎麼辦?) - 失去了as-you的好處型檢查。

這留下了一個比較簡單的正則表達式,它與所有合法的電子郵件不匹配,但足夠匹配,以至於有人註冊一個並不真正渺茫的機會。 從Validate email address in JavaScript?正則表達式應該做的伎倆相當不錯:

/^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\ 
".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA 
-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 

此外,你犯了一個小錯字:

else if(!email.test('#email')) { 
    $('#emailErrorMsg').text("OK"); 
} 

是對字符串「#email」測試 - 不與元素ID'email'。修改成:

else if(!email.test($('#email').val())) { 
    $('#emailErrorMsg').text("OK"); 
} 
+0

是的,這工作謝謝!原來我沒有把它分配給jquery! – user1766599

+0

如果有效,請將其標記爲答案(點擊左側的複選標記)。 –

2

的主要問題是,你有一個?在正則表達式的結束,緊接着包圍整個圖案括號。這有效地使整個匹配成爲可選的,所以正則表達式可以完全匹配任何東西。

另請注意,您正在測試文字字符串#email,而不是#email元素的值。確保您將適當的字符串傳遞給test()