多年来,我慢慢地开发了一个正则表达式,它可以正确验证大多数电子邮件地址,假设它们不使用IP地址作为服务器部分。
我在几个PHP程序中使用它,而且大多数时候都可以使用。然而,不时有人与我联系,他们对使用它的网站有问题,我最终不得不做出一些调整(最近我意识到我不允许四个字符的TLD)。
你有或见过验证电子邮件的最佳正则表达式是什么?
我见过几种使用函数的解决方案,这些函数使用了几个较短的表达式,但我宁愿在简单函数中使用一个长的复杂表达式,而不是在更复杂的函数中使用几个短表达式。
多年来,我慢慢地开发了一个正则表达式,它可以正确验证大多数电子邮件地址,假设它们不使用IP地址作为服务器部分。
我在几个PHP程序中使用它,而且大多数时候都可以使用。然而,不时有人与我联系,他们对使用它的网站有问题,我最终不得不做出一些调整(最近我意识到我不允许四个字符的TLD)。
你有或见过验证电子邮件的最佳正则表达式是什么?
我见过几种使用函数的解决方案,这些函数使用了几个较短的表达式,但我宁愿在简单函数中使用一个长的复杂表达式,而不是在更复杂的函数中使用几个短表达式。
当前回答
对于Angular2/Angular7,我使用以下模式:
emailPattern=“^[a-zA-Z0-9-_.+-]+@[a-zA-APP-GW-9-]+[.]+[a-zA-62-9-.]+(\\s)*”;私有createForm(){this.form=this.formBuilder.group({email:['',[Validators.required,Validators.pattern(this.emailPattern)]]});}
它还允许在结尾处添加额外的空间,在将其发送到后端之前,应该将其截断,但某些用户,特别是移动用户,很容易在结尾处错误地添加空间。
其他回答
我总是使用下面的正则表达式来验证电子邮件地址。它涵盖了基于英语字符的所有电子邮件地址格式。
"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
下面是一个C#示例:
添加程序集引用:
using System.Text.RegularExpressions;
并使用下面的方法传递电子邮件地址并得到一个布尔值
private bool IsValidEmail(string email) {
bool isValid = false;
const string pattern = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
isValid = email != "" && Regex.IsMatch(email, pattern);
// Same above approach in multiple lines
//
//if (!email) {
// isValid = false;
//} else {
// // email param contains a value; Pass it to the isMatch method
// isValid = Regex.IsMatch(email, pattern);
//}
return isValid;
}
此方法验证传入参数的电子邮件字符串。对于param为null、空字符串、未定义或param值不是有效电子邮件地址的所有情况,它都将返回false。只有当参数包含有效的电子邮件地址字符串时,它才会返回true。
为了使用JavaScript验证电子邮件地址,使用此功能更方便和高效(根据W3Schools):
function validateEmail()
{
var x = document.f.email.value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos+2 || dotpos+2 >= x.length)
{
alert("Not a valid e-mail address");
return false;
}
}
我用它,它很完美。
这个问题被问了很多,但我认为你应该退后一步,问问自己为什么要从语法上验证电子邮件地址?真正的好处是什么?
它不会捕捉常见的拼写错误。它并不阻止人们输入无效或虚构的电子邮件地址,或输入其他人的地址。
如果您想验证电子邮件是否正确,您别无选择,只能发送确认电子邮件并让用户回复。在许多情况下,出于安全原因或道德原因(例如,您不能违背某人的意愿签署服务),您必须发送确认邮件。
如前所述,您不能使用正则表达式验证电子邮件。然而,这是我们目前用来确保用户输入不是完全虚假的(忘记TLD等)。
此正则表达式将允许IDN域和@符号前后的特殊字符(如Umlauts)。
/^[\w.+-_]+@[^.][\w.-]*\.[\w-]{2,63}$/iu
您可以对任何电子邮件地址使用以下正则表达式:
^(([^<>()[\]\\.,;:\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,}))$
对于PHP
function checkEmailValidation($email)
{
$expression = '/^(([^<>()[\]\\.,;:\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,}))$/';
if(preg_match($expression, $email))
{
return true;
}
else
{
return false;
}
}
对于JavaScript
function checkEmailValidation(email)
{
var pattern = '/^(([^<>()[\]\\.,;:\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,}))$/';
if(pattern.test(email))
{
return true;
}
else
{
return false;
}
}