---
url: >-
  /statelake/scripting-reference/functions-and-procedures/string-functions/matchesmask.md
---

# MatchesMask

The **MatchesMask** function checks the string **String** to see if it matches a mask.

**MatchesMask** can be used to check strings against any syntactically correct mask - such as checking that a phone number only contains numbers, or that file names are valid.

The **Mask** parameter consists of literal characters, sets, and wildcards. Each literal character must match a single character in the string. The comparison to literal characters is case-insensitive.

* Each **set** begins with an opening square bracket (\[) and ends with a closing square bracket (]). Between the brackets are the elements of the set, where each element is a literal character or a range.

  * **Ranges** are specified by an initial value, a dash (-), and a final value.
  * Do not use spaces or commas to separate the elements of the set.
  * A set must match a single character in the string. The character matches the set if it is the same as one of the literal characters in the set, or if it is in one of the ranges in the set.
  * A character is in a range if it matches the initial value, the final value, or falls between the two values.
  * All comparisons are case-insensitive.
  * If the first character after the opening bracket of a set is an exclamation point (!), then the set matches any character that is not in the set.
  * If wildcards are not used, then the length of the string given by **String** must match the number of characters within the **Mask** string exactly, else the result will be **False**.

* **Wildcards** are asterisks (\*) or question marks (?). An asterisk matches any number of characters. A question mark matches a single arbitrary character.

**MatchesMask** returns **True** if the string matches the mask, but returns **False** if the string does not match the mask.

If the mask is syntactically invalid, **MatchesMask** raises an exception error.

**Declaration**: Function MatchesMask( const String, Mask : string) : Boolean

Several examples follow.

```pascal
procedure ScriptEvent(var Value:Variant);
var
  WhatFile, WhatNum : string;
  Check1, Check2, Check3 : boolean;
  ReJigPh : double;
begin
  WhatFile := 'ThisIsATestFile.txt';
  WhatNum := '09 476 3569';
  ReJigPh := ExtractNumber(WhatNum);
  Check1 := MatchesMask(WhatNum,'99 999 9999');           //Returns false
  Check2 := MatchesMask('5','[1-2]');                     //Returns false
  Check3 := MatchesMask(FloatToStr(ReJigPh), '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');
 If Check1 = True then
    LogInfo('Phone number is valid.')
 else
    LogInfo('Phone number is invalid.');

 If Check2 = True then
    LogInfo('Thank you.')
 else
    LogInfo('Sorry - it must be either 1 or 2 only.');

 If Check3 = True then
    LogInfo(FloatToStr(ReJigPh)+' phone number is valid.')
 else
    LogInfo('FloatToStr(ReJigPh)+' phone number is invalid.');

 If MatchesMask(WhatFile, '*.txt') then //Using a wildcard
    LogInfo('File name accepted.')
 else
    LogInfo('The file name is invalid.');

end;
```

The result of this code is below.
