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