繁体   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