# If var [not] in/contains value1,value2,...

检查变量的内容是否匹配列表中的某项.

    if Var in MatchList
    if Var not in MatchList

    if Var contains MatchList
    if Var not contains MatchList

## 参数

Var

  需要被检查的变量名称. 对于 "in" 运算符, 需要准确匹配列表中的某项.
  对于 "contains" 运算符, 会更容易形成匹配: 只要列表中的某项作为子字符串包含于 Var 中.

MatchList

  逗号分隔的字符串列表, 其中的每个字符串都将与 Var 的内容进行比较以寻找匹配. 在分隔逗号周围的任何空格或 tab 都是有意义的, 这表示它们也是匹配字符串的一部分. 例如, 如果 MatchList 被设置为 `ABC , XYZ`, 这时 Var 必须包含带有尾随空格的 ABC 或带有前导空格的 XYZ 才形成匹配.

  在匹配列表中两个连续的逗号产生单个原义逗号. 例如, 后面的匹配列表会在 string1 的末尾产生单个原义逗号: `if Var in string1,,,string2`. 同样地, 后面的匹配列表仅包含其中含有一个原义逗号的单个项目: `if Var in single,,item`. 要在列表中包含空的项目, 那么像这个例子那样把逗号作为首个字符: `if Var in ,string1,string2`(用于 "contains" 运算符时, 由于在所有字符串中都可以找到空项, 所以空项将总是会形成匹配).

  因为 MatchList 中的每一项并不是作为独立的参数, 所以此列表可以完整的包含在一个变量中. 事实上, 如果此列表的长度超过 16383, 那么列表的全部或部分必须包含在变量中以变量表示, 因为这个长度是任何脚本行的最大长度. 例如, MatchList 可以由 `%List1%,%List2%,%List3%` 组成, 其中的每个子列表包含了用来匹配词组的一个大的列表.

  列表中任何长度超过 16384 字符的单个项目, 超出长度的那些字符将被视为一个新列表项. 因此, 通常最好避免包含这样的项目.

## 备注

比较总是按字母顺序进行, 而不是作为数字. 例如, 字符串 "11" 不会匹配列表项 "11.0".

除了支持搜索多个字符串(其中任何一个都将形成匹配) 外, "contains" 运算符的作用与 InStr() 或 If[Not]InString 相同.

可以使用 `StringCaseSense On` 来设置在比较时区分大小写.

如果 MatchList 较长, 可以通过延续片段方法将其分解成较短的几行, 这样可以增加可读性和可维护性.

运算符 "in" 和 "contains" 不支持用于表达式中. 相反, 使用 If 语句, 如 `if (Var ~= "i)\A(Value1|Value2)\z")` 表示 "in", 或 `if (Var ~= "i)Value1|Value2")` 表示 "contains", 来模拟这些运算符的行为.

## 相关

if var between, IfEqual/Greater/Less, IfInString, StringCaseSense, 区块, Else

## 示例

检查 var 是否为文件扩展名 exe, bat 或 com.

    if var in exe,bat,com
        MsgBox The file extension is an executable type.

检查 var 是否为质数 1, 2, 3, 5, 7 or 11.

    if var in 1,2,3,5,7,11 ; 避免在列表中添加空格.
        MsgBox %var% is a small prime number.

检查 var 是否包含数字 1 或 3.

    if var contains 1,3  ; 注意, 比较的值是字符串, 而不是数字.
        MsgBox Var contains the digit 1 or 3 (Var could be 1, 3, 10, 21, 23, etc.)

检查 var 是否是 MyItemList 中的一个项目.

    if var in %MyItemList%
        MsgBox %var% is in the list.

允许用户输入一个字符串, 并检查它是否是单词 yes 或 no.

    InputBox, UserInput, Enter YES or NO
    if UserInput not in yes,no
        MsgBox Your input is not valid.

检查 active_title 是否包含 "Address List.txt" 或 "Customer List.txt", 检查是否不包含 "metapad" 或 "Notepad".

    WinGetTitle, active_title, A
    if active_title contains Address List.txt,Customer List.txt
        MsgBox One of the desired windows is active.
    if active_title not contains metapad,Notepad
        MsgBox But the file is not open in either Metapad or Notepad.

dftg