我正在使用 Excel 2013。我正在构建最终用户将填写的表单。
我有一个单元格供用户输入他们的电子邮件地址,我想建立一个全面的电子邮件验证。我在网上搜索了很多,我只找到了建议搜索和的存在,@
但.
如果例如最终用户输入以下内容:@@.com,不会标记任何错误。
正确的验证是什么?
注意:我尝试使用在线找到的 UDF 和 VBscript,但对我来说都不起作用。
答案1
适应Bill Manville 的技术,这应该对你有用。进入数据验证并选择风俗。输入此公式(假设您的电子邮件地址在单元格 A2 中):
=AND(ISERROR(FIND(" ",A2)),LEN(A2)-LEN(SUBSTITUTE(A2,"@",""))=1,IFERROR(SEARCH("@",A2)<SEARCH(".",A2,SEARCH("@",A2)),0),NOT(IFERROR(SEARCH("@",A2),0)=1),NOT(IFERROR(SEARCH(".",A2,SEARCH("@",A2))-SEARCH("@",A2),0)=1),LEFT(A2,1)<>".",RIGHT(A2,1)<>".")
以下是相同的公式,但为了便于阅读,将其分开:
=AND(
ISERROR(FIND(" ",A2))
,LEN(A2)-LEN(SUBSTITUTE(A2,"@",""))=1
,IFERROR(SEARCH("@",A2)<SEARCH(".",A2,SEARCH("@",A2)),0)
,NOT(IFERROR(SEARCH("@",A2),0)=1)
,NOT(IFERROR(SEARCH(".",A2,SEARCH("@",A2))-SEARCH("@",A2),0)=1)
,LEFT(A2,1)<>"."
,RIGHT(A2,1)<>"."
)
这将检查:
- 没有空格
- 只有一个
@
符号 @
符号前有一些字符- 符号
.
后至少有一个符号@
@
和以下.
符号之间至少有一个字符- 地址不是以
.
答案2
电子邮件地址格式定义明确RFC 2822。
基本上,您可以按如下方式简化它。
您有两个部分:用户@域。
域名采用点分十进制格式。例如 mydomain.tld、foo.bar.baz.net 等。
用户更复杂,它可以是带引号的字符串,也可以是点格式,其中点之间有内容,还有一个选项 + 标记。
示例1:
“@@pen00tje”@
superuser.com 用户为@@penootje
。域为superuser.com
。用户名和域之间有一个@。
例2:
[电子邮件保护]
例3:
[电子邮件保护]
这将通过邮件发送,[email protected]
但“收件人:”字段将包含[email protected]
。这允许您的邮件客户端过滤消息。
无效的例子:
[电子邮件保护] (用户名中不允许有两个点)
大多数网络表单似乎都弄错了这一点。即使是像戴尔和 Visa 这样的大型组织,在遇到合法但意外的电子邮件地址时也会失败。请务必阅读 RFC。一开始读懂写的内容并不容易,但它已经采用了一种非常适合转换为代码(或 Excel 规则)的格式。它是允许的内容的唯一真实来源。
答案3
=AND(NOT(ISERROR(FIND("@",A2))),NOT(ISERROR(FIND(".",A2))),ISERROR(FIND(",",A2)),ISERROR(FIND(" ",A2)),RIGHT(A2,1)<>".",ISNUMBER(MATCH("@.?*",A2,0)))