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

說明

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" 的大小寫錯誤 (請參閱 MatchOptions 來了解此行為的修改方式)。

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

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

例如,您可以 使用問號前有反斜線的模式 "Hello\?" () 來比對 "Hello"。

預先定義的模式

預先定義的模式提供簡單的方法來比對一組字元或多個字元的序列。 使用字串串連運算子 & 可結合您自己的文字字串與 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