多年来,我慢慢开发了一个正则表达式,可以正确验证MOST电子邮件地址,假设他们不使用IP地址作为服务器部分.
我在几个PHP程序中使用它,它大部分时间都可以工作.但是,我不时会遇到使用它的网站遇到问题的人,我最终不得不进行一些调整(最近我意识到我不允许使用4字符TLD).
验证电子邮件的最佳正则表达式是什么?
我已经看到了几个使用函数的解决方案,这些函数使用了几个较短的表达式,但我宁愿在一个简单的函数中使用一个长复杂表达式,而不是在一个更复杂的函数中使用几个短表达式.
是否有任何规则允许在任何电子邮件ID中具有指定数量的@符号.如果我们要使用PHP检查电子邮件ID是否有效,请记住我的想法.
我不认为之前已经问过这个问题......我当然找不到这个要求.
有一个返回ID的人的API.一般来说,ID应被视为区分大小写...但如果ID实际上是他们的电子邮件地址......并且您正在谈论此API的一个不那么出色的实现,它返回其电子邮件地址的大小写混合版本,有很多乐趣......
所以你正在谈论一个实现......它会给你提供像ID一样的URL,例如
http://foo.bar.com/blahblahblah
接下来你可以和另一个实现交谈......这会给你一些非显而易见的ID,比如说
as€jlhdésdj678hjghas7t7qhjdhg£
你可能正在谈论一个很好的实现,它会给你一个漂亮的小写电子邮件地址:
bob.mcspam@acme.org
或者你可能正在谈论不那么出色的实现,它返回完全等效的ID
bob.mcspam@ACME.org
RFC 2821规定只有邮箱区分大小写,但利用区分大小写的情况会导致大量的操作间问题......
我想要做的是识别电子邮件的字符串并强制域小写.识别URI字符串一样是容易的方案是要么http
还是https
我只需要小写域名这是一个容易得多解析.
如果给出一个由外部服务提供的字符串,是否有我可以使用的测试将确定该字符串是否是电子邮件地址,以便我可以强制域名小写?
可以忽略少量电子邮件地址,并且不会使域名小写.(允许假阴性)
如果字符串的一部分不是电子邮件地址的域部分,则强制将字符串的一部分强制为小写是不可接受的.(不允许误报)
请注意,这个问题是来自微妙的不同这个和这个是在你的这两个问题的背景已经知道该字符串应该是电子邮件地址.
在这个问题的上下文中,我们不知道字符串是电子邮件地址还是其他东西......这使得这个问题不同
为了验证电子邮件地址,我们在MailAddress Class上进行转发.但是,根据MailAddress类,这封电子邮件的@bbb..com地址似乎是有效的.
MSDN声明这是有效的电子邮件地址:
MailAddress类支持以下邮件地址格式:
- user @ host的简单地址格式.如果未设置DisplayName,则这是生成的邮件地址格式.
- 标准引用的显示名称格式为"显示名称".如果设置了DisplayName,则这是生成的格式.
- 如果不包括"显示名称"user @ host,则在用户名,主机名周围添加尖括号.
- 如果不包括这些名称,则会在DisplayName周围添加引号以显示名称.
- DisplayName支持Unicode字符.属性.
- 带引号的用户名.例如,"用户名"@host.
- 用户名中的连续点和尾随点.例如,user ... name .. @ host.
- 括号内的域文字.例如, .
- 评论.例如,(评论)"显示名称"(评论)<(评论)用户(评论)@(评论)域(评论)>(评论).传输前删除注释.
取自https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx.
请注意,7 bullet接近此问题,但它表示连续点可以显示在域中不在域中的用户名中.
其他资源如http://isemail.info(http://isemail.info/a@bbb..com)表明这不是有效的电子邮件地址.
你认为应该是正确的行为?这是一个poc.
//C# Example
var emailAddress = @"a@bbb..com";
Func<string,bool> validEmail = (email)=>
{
try
{
var address = new System.Net.Mail.MailAddress(email);
return true;
}catch (Exception ex)
{
return false;
}
};
Assert.IsTrue(validEmail(emailAddress));
//using NUnit.Framework
//O2Ref:nunit.framework.dll
Run Code Online (Sandbox Code Playgroud) 我正在研究检查String
一个有效的电子邮件地址的最佳方法.我现在关注两个选项,即使用javax.mail.internet.InternetAddress
; 或者使用Apache Commons EmailValidator
,它在内部使用复杂的正则表达式解析器.
我想知道在正确性方面挑选一个优于另一个是否有任何优势,或者两者都很好?我知道InternetAddress
在某些情况下不能有效处理非ascii字符的事实.
以下是我正在使用的代码:
它总是给我输出"无效的电子邮件地址"
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String name="";
do
{
System.out.println("Email:");
String email= br.readLine();
if(!name.matches("^[a-zA-Z0-9]+@[a-zA-Z0-9]+(.[a-zA-Z]{2,})$"))
System.out.println("Invalid email address");
else
break;
}while(true);
Run Code Online (Sandbox Code Playgroud)