簡體   English   中英

使用正則表達式驗證 email 模式

[英]Validate email pattern with regex

我用谷歌搜索了很多,最好和最短的答案是:

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

它進行驗證,直到

somoene@hotmail

但如果我輸入

sdsdsdsd@hotmail...com

sdsdsdsd@hotmail.c

2222@hotmail.com

所有這些都不會被 email 無效的正則表達式捕獲。

我如何也可以使用正則表達式驗證這種情況?

<label for="email">Email <span class="error">*</span></label>
<input type="email" class="form-control" [(ngModel)]="contactUsForm.email" name="email" id="email" required
    #email="ngModel" pattern="^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$" />

當你選擇最短的時候,你就放棄了一些復雜性,就像你看到的那些。

讓我們划分你的正則表達式:


第一部分,在@之前:

[a-zA-Z0-9_.+-]+表示字母和數字的一個或多個重復, _ , . , 還有+ , -


第二部分,在@.

[a-zA-Z0-9-]+表示只有一個字母和數字和- (不允許點)


第三部分,之后.

[a-zA-Z0-9-.]+表示一個或多個字母、數字、 -. - 所以你可以在這部分有幾十個點。


如果您想避免接受sdsdsdsd@hotmail...com為有效,則必須限制最后一部分,不接受點 - [a-zA-Z0-9-.]+將變為[a-zA-Z0-9-]+ - 但請記住,地址超過一個點時會出現問題,例如以.co.uk結尾的任何地址。

如果您想避免接受hotmail.c為有效,您必須在最后一部分限制至少兩個字符 - [a-zA-Z0-9-.]+將變為[a-zA-Z0-9-.]{2,} ;

在這些修復之后,您仍然會遇到問題。 最好為這項工作花費更長和更詳細的正則表達式。

在stackoverflow中有很多。 特定於 javascript,在How to validate an email address in JavaScript (5399 upvotes)中,您有:

function validateEmail(email) {
    const 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(String(email).toLowerCase());
}

如何使用正則表達式驗證 email 地址? (2603 票),你有:

(?:[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])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-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])+)\])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM