[英]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.