我有这个公式来验证Excel的电子邮件地址:
=AND(ISERROR(FIND(" ",[Send Report To],1)),IF(ISERROR(FIND("@",[Send Report To],2)),FALSE,AND(ISERROR(FIND("@",[Send Report To],FIND("@",[Send Report To],2)+1)),IF(ISERROR(FIND(".",[Send Report To],FIND("@",[Send Report To],2)+2)),FALSE,FIND(".",[Send Report To],FIND("@",[Send Report To],2)+2)<LEN([Send Report To])))))
但是当我输入此电子邮件ID时失败:sandy,rocks@gmail.com
或sandy.rocks@gmail,co.uk
。
任何人都可以修改上面的验证公式,以避免电子邮件地址中的逗号等特殊字符吗?
答案 0 :(得分:1)
请看这个公式。您可以在参数中添加更多特殊字符。我刚刚添加了#34;!,@,#,$,%,^&#34;这些人物。
=IF(OR(ISNUMBER(SEARCH(",",A1)),ISNUMBER(SEARCH("$",A1)),ISNUMBER(SEARCH("!",A1)),ISNUMBER(SEARCH("%",A1)),ISNUMBER(SEARCH("^",A1)),ISNUMBER(SEARCH("#",A1)),ISNUMBER(SEARCH("@",A1,SEARCH("@",A1)+1))),FALSE,TRUE)
<强>截图强>
答案 1 :(得分:0)
我认为使用内置公式
很难相反,带正则表达式的UDF适合确保电子邮件模式匹配。
详细解释了细节和例子。请阅读该帖子。
基于这个答案,这是我提出的UDF
Function simpleCellRegex(Myrange As Range) As Boolean
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
strPattern = "^[a-z][a-z0-9\._]+@[a-z]+\.[a-z]+\.?[a-z]+$"
If strPattern <> "" Then
strInput = LCase(Myrange.Value)
With regEx
.Global = True
.MultiLine = False
.IgnoreCase = True
.Pattern = strPattern
End With
simpleCellRegex = regEx.Test(strInput)
End If
Set regEx = Nothing
End Function
答案 2 :(得分:0)
答案是根据Haruns的建议。这确实有效
= IF(或(ISNUMBER(搜索(&#34;,&#34;,[发送报告])),ISNUMBER(搜索(&#34; $&#34;,[发送报告]) ),ISNUMBER(搜索(&#34;!&#34;,[发送报告])),ISNUMBER(搜索(&#34;%&#34;,[发送报告])),ISNUMBER(搜索( &#34; ^&#34;,[发送报告])),ISNUMBER(搜索(&#34;#&#34;,[发送报告])),ISNUMBER(搜索(&#34; @& #34;,[发送报告],搜索(&#34; @&#34;,[发送报告])+ 1))),FALSE,TRUE)