2011-07-04 23 views
2

我試圖用Javascript中的字符串來匹配電子郵件正則表達式\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b。目前我正在使用代碼email.match(/b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}/),但它不匹配任何電子郵件地址。在Javascript中使用正則表達式的前需要進行更改嗎?你如何在JavaScript中匹配正則表達式?

+4

頂級域名驗證電子郵件的詳細信息並不限定於由他們2-4字母... – Quentin

+0

@Quentin - 如.museum –

+3

對於這個問題,[他們不限於拉丁腳本](http://news.cnet.com/8301-1023_3-20004429-93.html)或者 – Quentin

回答

5

問題匹配的電子郵件地址與正則表達式的旁白:

您必須添加不區分大小寫的修改因爲你只匹配大寫字符。你還缺少\b前(這使得表達式匹配b字面意思)和\b末(感謝@Tomalak)(即使它的「工作」沒有它):

email.match(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i) 

如果你只是想知道的表達是否匹配,你可以使用.test

patter.test(email) 

More about regular expressions in JavaScript

+1

最後是'\ b'。我認爲OP在添加分隔符時會產生誤解。 –

+0

[This](http://www.regular-expressions.info/email.html)似乎是正則表達式的來源,是的,它應該是不區分大小寫的,並且有一個'\ b'結束。優秀的文章。 –

0

您應該使用符合RFC 2822的RegEx驗證電子郵件,即使它很大;

function check_mail(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])+)\])/i) 

    if(str.match(reg)){ 
    return true; 
    }else{ 
    return false; 
    } 
} 

有關使用RegExs看到regular-expression.info

+1

不,不,我虛心不同意。有真實的地址不符合RFC。另外你不知道一個有效的格式是否真的是一封真正的電子郵件,所以有什麼意義。只是爲了檢查「@」字符作爲基本的完整性檢查,更容易和更易於維護。 –

+0

的確,這一切都取決於你在找什麼:測試一個真正的電子郵件意味着發送一封郵件給地址。如果你需要一個非常快速的測試,測試格式可以限制爲「@」。我使用我的解決方案作爲一個平均值。 –