測試文字字串是否符合模式。

說明

IsMatch 函式會測試文字字串是否符合某種模式,此模式可以包含一般字元、預先定義的模式或規則運算式

使用 IsMatch 可驗證使用者在文字輸入控制項中輸入的內容。 例如,您可以先確認使用者所輸入的電子郵件地址是否有效,再將結果儲存至資料來源。 如果輸入的內容不符合您的準則,則新增其他控制項來提示使用者更正其輸入內容。

根據預設,IsMatch 會針對整個文字字串執行區分大小寫的比對。 您可以藉由指定一或多個 MatchOptions 來修改此行為。

IsMatch 會在文字字串符合模式時傳回 *true*,若不符合則傳回 *false*。

模式

IsMatch 的使用關鍵在於描述要比對的模式。 您可以透過下列項目的組合來描述文字字串的模式︰

  • 一般字元,例如 "abc""123"
  • 預先定義的模式,例如 LetterMultipleDigitsEmail (Match 列舉會定義這些模式)。
  • 規則運算式程式碼,例如 "\d+\s+\d+""[a-z]+"

請使用字串串連運算子 & 來結合這些元素。 例如,"abc" & Digit & "\s+" 便是有效的模式,它會比對字元 "a"、"b" 和 "c",接著比對數字 0 到 9,最後比對至少一個空白字元。

一般字元

最簡單的模式是要完全符合的一般字元序列。

例如,字串 "Hello" 便完全符合模式 "Hello"。 不多也不少。 字串 "hello!" 則不符合該模式,因為該字串尾端有驚嘆號,而且字母 "h" 的大小寫錯誤 doesn't match the pattern because of the exclamation point on the end and the case is wrong for the letter "h". (請參閱 MatchOptions 來了解此行為的修改方式)。

在模式語言中,某些字元已保留供特殊目的使用。 若要使用這些字元,請在字元前面加上 \ (反斜線) 以指出其應該純粹當作字元,或使用其中一種預先定義的模式。 下表列出這些特殊字元︰

特殊字元 說明
. 點或句號
? 問號
*** 星號
+ 加號
( ) 括號
[ ] 方括號
{ } 大括號
^ 插入號
$ 貨幣符號
| 分隔號或直立線符號
**** 反斜線

例如,您可以使用模式 "Hello\?" (問號前面加上反斜線) 來比對 "Hello?"。 by using the pattern "Hello\?" with a backslash before the question mark.

預先定義的模式

預先定義的模式提供簡單的方法來比對一組字元或多個字元的序列。 使用字串串連運算子 & 可結合您自己的文字字串與 Match 列舉的成員:

Match 列舉 說明 規則運算式
Any 比對任何字元。 .
Comma 比對逗號。 ,
Digit 比對單一數字 ("0" 到 "9")。 \d
Email 比對包含 "at" 符號 ("@") 的電子郵件地址以及包含點的網域名稱 (".") .+@.+\.[^\.]{2,}
Hyphen 比對連字號。 \-
LeftParen 比對左括號 "("。 \(
Letter 比對字母。 \p{L}
MultipleDigits 比對一或多個數字。 \d+
MultipleLetters 比對一或多個字母。 \p{L}+
MultipleNonSpaces 比對一或多個不會新增空白字元 (空格、定位字元、新行字元) 的字元。 \S+
MultipleSpaces 比對一或多個會新增空白字元 (空格、定位字元、新行字元) 的字元。 \s+
NonSpace 比對不會新增空白字元的單一字元。 \S
OptionalDigits 比對零個、一個或多個數字。 \d
OptionalLetters 比對零個、一個或多個字母。 \p{L}
OptionalNonSpaces 比對零個、一個或多個不會新增空白字元的字元。 \S
OptionalSpaces 比對零個、一個或多個會新增空白字元的字元。 \s
Period 比對句號或點 (".")。 \.
RightParen 比對右括號 ")"。 \)
Space 比對會新增空白字元的字元。 \s

例如,模式 "A" & MultipleDigits 會比對字母 "A" 後面接著一或多個數字。

規則運算式

IsMatch 所使用的模式是*規則運算式*。 上面所說明的一般字元和預先定義的模式有助於建置規則運算式。

規則運算式非常強大,適用於許多程式設計語言,並可用於各種用途。 本文無法說明規則運算式的所有層面,但我們在網路上發佈了大量的資訊和教學課程來協助您。

規則運算式有不同方言,PowerApps 使用其中一種變化的 JavaScript 方言。 如需詳細資訊,請參閱規則運算式語法

在上面的 Match 列舉資料表中,每個列舉都會展開成規則運算式,而且「規則運算式」資料行中的文字字串會定義該運算式。

比對選項

您可以藉由指定一或多個選項來修改 IsMatch 的行為,若要結合這些選項,您可以使用字串串連運算子 (&)。

根據預設,IsMatch 會測試整個文字字串的完整比對。

MatchOptions 列舉 說明 對規則運算式的影響
BeginsWith 模式必須從文字開頭來比對。 在規則運算式的開頭新增 ^
Complete 預設值。 模式必須從頭到尾比對整個文字。 在規則運算式的開頭新增 ^,並在結尾新增 $
Contains 模式必須出現在文字中的某處,但開頭或結尾不必是此模式。 不會修改規則運算式。
EndsWith 模式必須比對文字的結尾。 在規則運算式的結尾新增 $
IgnoreCase 會以不區分大小寫的方式處理字母的比對。 根據預設,比對會區分大小寫。 不會修改規則運算式。
Multiline 跨多行進行比對。 不會修改規則運算式。

語法

IsMatch( Text, Pattern [, Options ] )

  • Text – 必要項目。 要測試的文字字串。
  • Pattern – 必要項目。 要當成文字字串來測試的模式。 串連 Match 列舉所定義的預先定義模式,或提供規則運算式。
  • Options – 選擇性項目。 MatchOptions 列舉值的文字字串組合。 系統預設會使用 MatchOptions.Complete

範例

一般字元

假設您的應用程式包含名為 TextInput1文字輸入控制項。 使用者會在這個控制項中輸入值以便儲存到資料庫。

使用者在 TextInput1 中輸入 Hello world

公式 說明 結果
IsMatch( TextInput1.Text, "Hello world" ) 測試使用者的輸入是否完全符合字串 "Hello world" true
IsMatch( TextInput1.Text, "Good bye" ) 測試使用者的輸入是否完全符合字串 "Good bye" false
IsMatch( TextInput1.Text, "hello", Contains ) 測試使用者的輸入是否包含 "hello" (區分大小寫) 這個單字。 false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) 測試使用者的輸入是否包含 "hello" (不區分大小寫) 這個單字。 true

預先定義的模式

公式 說明 結果
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit & Digit ) 比對美國的社會安全號碼 true
IsMatch( "joan@contoso.com", Email ) 比對電子郵件地址 true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) 比對一連串數字、句號,然後零個或多個數字。 true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) 比對一連串數字、句號,然後零個或多個數字。 文字中沒有句號,因此這個模式未比對成功。 false

規則運算式

公式 說明 結果
IsMatch( "986", "\d+" ) 比對大於零的整數。 true
IsMatch( "1.02", "\d+(.\d\d)?" ) 比對正數貨幣金額。 如果輸入中包含小數點,輸入的值還必須在小數點後面包含 2 個數字字元。 例如,3.00 有效,但 3.1 無效。 true
IsMatch( "-4.95", "(-)?\d+(.\d\d)?" ) 比對正數或負數的貨幣金額。 如果輸入中包含小數點,輸入的值還必須在小數點後面包含 2 個數字字元。 true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) 比對美國的社會安全號碼。 驗證所提供輸入欄位的格式、類型和長度。 要比對的字串必須包含 3 個數字字元,後接一個連字號,再來是 2 個數字字元,後接一個連字號,然後是 4 個數字字元。 true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) 和前一個範例相同,但輸入中的其中一個連字號位置不對。 false
IsMatch( "weakpassword", "(?!^[0-9]$)(?!^[a-zA-Z]$)([a-zA-Z0-9]{8,10})" ) 驗證強式密碼,此密碼必須包含 8 個、9 個或 10 個字元,此外要有至少一個數字和至少一個字母字元。 字串中不能包含特殊字元。 false
IsMatch( "http://microsoft.com", "(ht|f)tp(s?):\/\/[0-9a-zA-Z]([-.\w][0-9a-zA-Z])(:(0-9))(\/?)([a-zA-Z0-9-.\?\,\'\/\+&%\$#_]*)?" ) 驗證 http、https 或 ftp URL。 true