[英]Validate regex of email
我有一個收件人文本框,可以輸入電子郵件地址並發送給該人。如您所知,有人輸入電子郵件時要考慮正則表達式。 例如,沒有@
的電子郵件不是有效的電子郵件。
因此,我編寫了一個函數來檢查電子郵件的正則表達式,如下所示:
//check email address
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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,}))$/;
return re.test(email);
}
因此,如果我寫test@hotmail.com
那么這將是有效的,而test@@@hotmail.com
將是無效的。 是的,這沒有問題。 但是,我可以在我的文本框中以這種形式發送給多個收件人:
test@hotmail.com,test123@hotmail.com,....
因此,如果我輸入上面的內容,它將被視為無效,但是看到我的正則表達式表達式不好,是否有辦法讓它通過?
編輯:
正則表達式如下所示:
var re = /(?:^|,)((([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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,}))(?:$|(?=,)))/;
在模式的開始,增加對非捕獲組,
或者字符串的開頭:
(?:^|,)
並且在圖案的端部,添加非捕獲組的字符串,或者為先行的端部,
:
(?:$|(?=,))
如果用逗號隔開,則允許在一行上進行多個匹配。
(?:^|,)(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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,}))(?:$|(?=,))
^^^^^^^ ^^^^^^^^^^^
https://regex101.com/r/Dzyfqt/1
如果您不僅要驗證電子郵件,還要提取電子郵件,則有時會包含一個前導逗號,這可能是不希望的-要解決此問題,請將所有內容括在最初的非捕獲組之后,再放入另一個組:
(?:^|,)((([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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,}))(?:$|(?=,)))
並且僅電子郵件地址將位於第一個捕獲的組中。
如果要檢查字符串是否包含逗號分隔的電子郵件地址,而除了逗號分隔的電子郵件地址,則可以使用第一個模式,並將每個匹配的電子郵件替換為空字符串,並檢查是否最后一個結果字符串為空:
function validateEmail(email) { var re = /(?:^|,)(([^<>()[\\]\\\\.,;:\\s@\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\"]+)*)|(\\".+\\"))@((\\[[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,}))(?:$|(?=,))/g; return email.replace(re, '') === ''; } console.log(validateEmail('test@hotmail.com,test123@hotmail.com'));
請檢查以下代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> </head> <script> function sendmessage(){ var recipient = document.getElementById("recipient").value; var result=validateEmails(recipient); alert(result); } function validateEmails(emailString) { var regex = /^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$/; var result = emailString.replace(/\\s/g, "").split(/,|;/); for(var i = 0;i < result.length;i++) { if(!regex.test(result[i])) { return false; } } return true; } </script> <body>    To:<input type="email" style="font-size: 10pt;" size="70" id="recipient"><br><br> <div class="Send"> <button type="button" style="font: 13px/1.231 Trebuchet MS;" onclick="sendmessage()"> Send </button> </div> </body> </html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.