禁止在电子邮件validation公式中使用“@”以外的特殊字符

我有这个公式validationExcel的电子邮件地址:

=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]))))) 

但是,当我input这个电子邮件ID: sandy,rocks@gmail.comsandy.rocks@gmail,co.uk时会失败。

任何人都可以修改上面的validation公式,以避免电子邮件地址中的逗号等特殊字符?

请看这个公式。 你可以添加更多的特殊字符或参数。 我刚刚添加了“!,@,#,$,%,^”这些字符。

 =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) 

截图

在这里输入图像说明

我认为这是一个内置的公式很难

相反,使用正则expression式的UDF适合确保电子邮件模式匹配。

请参阅此问题的答案https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops

很好地解释了细节和例子。 请阅读该post。

基于这个答案,这里是我提出的UDF

 Function simpleCellRegex(Myrange As Range) As Boolean Dim regEx As New RegExp Dim strPattern As String Dim strInput As String strPattern = "^[az][a-z0-9\._]+@[az]+\.[az]+\.?[az]+$" 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 

答案是按照Haruns的build议。 这确实有效

= IF(OR(ISNUMBER(SEARCH(“,”,[Send Report To]))),ISNUMBER(SEARCH(“$”,[Send Report To])),ISNUMBER ),ISNUMBER(SEARCH(“%”,[Send Report To])),ISNUMBER(SEARCH(“^”,[Send Report To])),ISNUMBER(SEARCH(“#”,[Send Report To])) ,search(“@”,[发送报告至],search(“@”,[发送报告至])+ 1))),假,真)