ASP Classic中如何在IF语句内正确使用LIKE判断包含指定邮箱
你当前使用的是ASP环境的VBScript语法,原生VBScript不支持SQL风格的LIKE运算符和%通配符写法,所以原有代码会直接报错。另外直接做模糊子串匹配还可能出现误判,比如目标邮箱是a@example.com,邮箱列表里存在aa@example.com时,模糊匹配会错误判定命中。
下面是两种可用的解决方案:
方案1:拆分列表精准匹配(推荐,无匹配误差)
将逗号分隔的邮箱列表拆分为数组后遍历比对,完全避免误判问题,同时兼容邮箱列表里带空格的场景:
UserEmailForTask = Session("ADmail") Dim IT_User_Tasks IT_User_Tasks = "NO" ' 先赋默认值 ' 优先判断部门条件 If Session("ADdepartment") = "IT" Then IT_User_Tasks = "YES" Else Dim emailArr, currEmail ' 拆分逗号分隔的邮箱列表 emailArr = Split(objGetTaskEmailsSettings("IT_Email"), ",") For Each currEmail In emailArr ' 去除前后空格后做全等匹配 If Trim(currEmail) = UserEmailForTask Then IT_User_Tasks = "YES" Exit For ' 命中后直接退出循环,无需继续遍历 End If Next End If
方案2:精简写法(适合不想写循环的场景)
给邮箱列表和目标邮箱前后都拼接逗号,再用InStr函数判断是否存在,可以避免部分匹配的误判问题:
UserEmailForTask = Session("ADmail") Dim IT_User_Tasks IT_User_Tasks = "NO" If Session("ADdepartment") = "IT" OR InStr("," & Replace(objGetTaskEmailsSettings("IT_Email"), " ", "") & ",", "," & UserEmailForTask & ",") > 0 Then IT_User_Tasks = "YES" End If
这里加了Replace去除邮箱列表里的所有空格,适配列表中邮箱前后带空格的场景。
内容的提问来源于stack exchange,提问作者Stig Kølbæk
相关产品推荐
相关产品推荐

