Các hàm IsMatch, Match và MatchAll

Áp dụng cho: Ứng dụng Canvas Ứng dụng dựa trên mô hình Power Pages Power Platform CLI

Kiểm tra sự trùng khớp hoặc trích xuất các phần của chuỗi văn bản dựa trên mẫu.

Mô tả

Hàm IsMatch kiểm tra xem một chuỗi văn bản có khớp với một mẫu hay không. Mẫu này có thể chứa các ký tự thông thường, các mẫu được xác định trước hoặc một biểu thức chính quy. Hàm MatchMatchAll trả về nội dung khớp, bao gồm cả các đoạn khớp.

Sử dụng hàm IsMatch để xác thực những gì người dùng đã nhập vào công cụ điều khiển Nội dung nhập văn bản. Ví dụ: bạn có thể xác nhận xem người dùng đã nhập địa chỉ email hợp lệ hay chưa trước khi kết quả được lưu vào nguồn dữ liệu. Nếu nội dung nhập không phù hợp với tiêu chí của bạn, hãy thêm các công cụ điều khiển khác nhắc người dùng sửa nội dung nhập.

Sử dụng hàm Match để trích xuất chuỗi văn bản đầu tiên khớp với mẫu và dùng hàm MatchAll để trích xuất tất cả các chuỗi văn bản khớp. Bạn cũng có thể trích xuất các nội dung khớp để phân tích những chuỗi phức tạp.

Match trả về bản ghi thông tin cho kết quả khớp đầu tiên được tìm thấy và MatchAll trả về bảng bản ghi cho mọi kết quả khớp được tìm thấy. (Các) bản ghi có chứa:

Column Loại Description
trận đấu phụ được đặt tên hoặc các trận đấu phụ Văn bản Mỗi đoạn khớp có tên sẽ có cột riêng. Tạo một đoạn khớp có tên bằng cách sử dụng (?<tên>...) trong biểu thức chính quy. Nếu một đoạn khớp có cùng tên với một trong các cột được xác định trước (bên dưới), thì hệ thống sẽ ưu tiên đoạn khớp và hiển thị cảnh báo. Để tránh nhận được cảnh báo này, hãy đổi tên đoạn khớp.
Đầy đủ Chữ Tất cả các chuỗi văn bản đều khớp.
Bắt đầu trận đấu Số Vị trí đầu tiên của nội dung khớp trong chuỗi văn bản đã nhập. Hàm trả về giá trị 1 cho ký tự đầu tiên của chuỗi.
Các trận đấu phụ Bảng văn bản một cột (cột Giá trị) Bảng các đoạn khớp có và không có tên theo thứ tự xuất hiện trong biểu thức chính quy. Nói chung, các đoạn khớp có tên thường dễ thao tác hơn và được khuyến nghị. Sử dụng hàm ForAll hoặc hàm Last( FirstN( ... ) ) để thao tác với một đoạn khớp riêng lẻ. Nếu không có đoạn khớp nào được xác định trong biểu thức chính quy, bảng này sẽ hiển thị nhưng trống.

Các hàm này hỗ trợ MatchOptions. Theo mặc định:

  • Các hàm này thực hiện so khớp có phân biệt chữ hoa chữ thường. Sử dụng MatchOptions.IgnoreCase để thực hiện so khớp không phân biệt chữ hoa chữ thường.
  • IsMatch so khớp với toàn bộ chuỗi văn bản (Complete MatchOption), trong khi MatchMatchAll tìm kiếm kết quả khớp ở bất kỳ đâu trong chuỗi văn bản (Contains MatchOption). Sử dụng các tùy chọn Complete, Contains, BeginsWith hoặc EndsWith tùy theo trường hợp của bạn.

IsMatch trả về true nếu chuỗi văn bản khớp với mẫu hoặc false nếu không khớp. Match trả về trống nếu không tìm thấy kết quả khớp nào có thể được kiểm tra bằng hàm IsBlank . MatchAll trả về một bảng trống nếu không tìm thấy kết quả khớp nào có thể được kiểm tra bằng hàm IsEmpty .

Nếu bạn đang sử dụng hàm MatchAll để phân tách một chuỗi văn bản, hãy cân nhắc dùng hàm Split, hàm này dễ sử dụng và nhanh hơn.

Mẫu

Yếu tố quan trọng để dùng các hàm này nằm ở việc mô tả mẫu để so khớp. Bạn mô tả mẫu trong một chuỗi văn bản ở dạng tổ hợp như sau:

  • Các ký tự thông thường, chẳng hạn như "abc" hoặc "123".
  • Các mẫu được xác định trước, chẳng hạn như Letter, MultipleDigits hoặc Email. (Enum Match xác định các mẫu này.)
  • Mã biểu thức chính quy, chẳng hạn như "\d+\s+\d+" hoặc "[a-z]+".

Kết hợp các phần tử này bằng cách sử dụng toán tử nối chuỗi &. Ví dụ: "abc" & Digit & "\s+" là một mẫu hợp lệ khớp với các ký tự "a", "b" và "c", theo sau là một chữ số từ 0 đến 9, theo sau là ít nhất một ký tự khoảng trắng.

Các ký tự thông thường

Mẫu đơn giản nhất là một chuỗi các ký tự thông thường cần khớp chính xác.

Ví dụ: khi được sử dụng với hàm IsMatch, chuỗi "Hello" khớp chính xác với mẫu "Hello". Chính xác tuyệt đối. Chuỗi "hello!" không khớp với mẫu vì có dấu chấm than ở cuối và chữ "h" không viết hoa. (Xem MatchOptions để biết cách sửa đổi hành vi này.)

Trong ngôn ngữ mẫu, một số ký tự được dành riêng cho các mục đích đặc biệt. Để sử dụng các ký tự này, hãy thêm vào ký tự đó tiền tố \ (dấu gạch chéo ngược) để chỉ ra rằng ký tự nên được hiểu theo nghĩa đen hoặc sử dụng một trong các mẫu được xác định trước như mô tả sau trong chủ đề này. Bảng sau đây liệt kê các ký tự đặc biệt:

Ký tự đặc biệt Description
. dấu chấm hoặc dấu chấm câu
? dấu chấm hỏi
* dấu hoa thị
+ cộng
( ) dấu ngoặc đơn
[ ] dấu ngoặc vuông
{ } dấu ngoặc nhọn
^ dấu mũ
$ ký hiệu đô la
| dấu gạch đứng hoặc dấu sổ
\ dấu gạch chéo ngược

Ví dụ: bạn có thể ghép "Hello?" bằng cách sử dụng mẫu "Hello\?" với dấu gạch chéo ngược trước dấu chấm hỏi.

Các mẫu được xác định trước

Các mẫu được xác định trước giúp quá trình so khớp một trong các nhóm ký tự hoặc một chuỗi nhiều ký tự trở nên đơn giản. Sử dụng toán tử nối chuỗi & để kết hợp các chuỗi văn bản của riêng bạn với các thành viên của Match kiểu liệt kê:

Enum so khớp Mô tả Biểu thức chính quy
Bất kì So khớp bất kỳ ký tự nào. .
Dấu phẩy So khớp dấu phẩy. ,
chữ số So khớp với một chữ số ("0" đến "9"). \d
E-mail So khớp một địa chỉ email có chứa biểu tượng "at" ("@") và một tên miền có chứa dấu chấm (".") .+\@.+\\.[^\\.]{2,}
Dấu gạch nối So khớp một dấu gạch nối. \-
Bên tráiParen So khớp dấu ngoặc trái "(". \(
Thư So khớp chữ cái. \p{L}
Nhiều chữ số So khớp 1 hoặc nhiều chữ số. \d+
Nhiều chữ cái So khớp 1 hoặc nhiều chữ cái. \p{L}+
NhiềuKhôngKhoảngTrống So khớp với một hoặc nhiều ký tự không thêm khoảng trắng (không phải khoảng trắng, tab hoặc dòng mới). \S+
Nhiều Không Gian So khớp với một hoặc nhiều ký tự có thêm khoảng trắng (khoảng trắng, tab hoặc dòng mới). \s+
Không gian So khớp một ký tự không thêm khoảng trắng. \S
Tùy chọnChữ số So khớp 0, 1 hoặc nhiều chữ số. \d*
Tùy chọnChữ cái So khớp 0, 1 hoặc nhiều chữ cái. \p{L}*
Tùy chọnNonSpaces So khớp 0, 1 hoặc nhiều ký tự không thêm khoảng trắng. \S*
Không gian tùy chọn So khớp 0, 1 hoặc nhiều ký tự thêm khoảng trắng. \s*
Giai đoạn So khớp dấu chấm câu hoặc dấu chấm ("."). \.
PhảiParen So khớp dấu ngoặc phải ")". \)
Không gian So khớp một ký tự có thêm khoảng trắng. \s
Thẻ Khớp một ký tự tab. \t

Ví dụ, mẫu "A" & MultipleDigits sẽ khớp với chữ cái "A" theo sau là một hoặc nhiều chữ số.

Biểu thức chính quy

Mẫu mà các hàm này sử dụng là một biểu thức chính quy. Các ký tự thông thường và các mẫu được xác định trước như mô tả trước đó trong chủ đề này giúp xây dựng các biểu thức chính quy.

Các biểu thức chính quy mang lại hiệu quả cao, bằng nhiều ngôn ngữ lập trình và được sử dụng cho nhiều mục đích. Ngoài ra, biểu thức này có thể thường giống với một chuỗi các dấu chấm câu. Bài viết này không mô tả tất cả các khía cạnh của biểu thức chính quy, nhưng mang đến rất nhiều thông tin, hướng dẫn và công cụ có sẵn trên web.

Biểu thức chính quy có nhiều phương ngữ và Power Apps sử dụng một biến thể của phương ngữ JavaScript. Xem cú pháp của biểu thức chính quy để tìm hiểu về cú pháp. Các đoạn khớp có tên (đôi khi gọi là nhóm khớp có tên) được hỗ trợ:

  • Các đoạn khớp có tên: (?<tên> ...)
  • Phản hồi có tên: \k<tên>

Trong bảng enum Match đề cập trước đó trong chủ đề này, mỗi enum xuất hiện trong cùng một hàng với biểu thức chính quy tương ứng.

Tùy chọn so khớp

Bạn có thể sửa đổi hành vi của các hàm này bằng cách chỉ định một hoặc nhiều tùy chọn, bạn có thể kết hợp chúng bằng cách sử dụng toán tử nối chuỗi (&).

Bảng liệt kê MatchOptions Description Tác động đến biểu thức chính quy
MatchOptions.Bắt đầu với Mẫu phải khớp từ đầu văn bản. Thêm ^ vào đầu biểu thức chính quy.
MatchOptions.Hoàn thành Mặc định đối với IsMatch. Mẫu phải khớp toàn bộ chuỗi văn bản, tính từ đầu văn bản. Thêm ^ vào đầu và thêm $ vào cuối biểu thức chính quy.
MatchOptions. Chứa Mặc định đối với hàm MatchMatchAll. Mẫu phải xuất hiện ở đâu đó trong văn bản nhưng không cần phải ở đầu hoặc cuối văn bản. Không sửa đổi biểu thức chính quy.
MatchOptions.Kết thúc bằng Mẫu phải khớp đến cuối văn bản. Thêm $ vào cuối biểu thức chính quy.
MatchOptions.IgnoreCase Coi chữ hoa và chữ thường là như nhau. Theo mặc định, so khớp có phân biệt chữ hoa chữ thường. Không sửa đổi biểu thức chính quy. Tùy chọn này tương đương với công cụ sửa đổi "i" tiêu chuẩn đối với các biểu thức chính quy.
MatchOptions.Nhiều dòng So khớp trên nhiều dòng. Không sửa đổi biểu thức chính quy. Tùy chọn này tương đương với công cụ sửa đổi "m" tiêu chuẩn đối với các biểu thức chính quy.

Việc sử dụng hàm MatchAll tương đương với việc sử dụng công cụ sửa đổi "g" tiêu chuẩn đối với các biểu thức chính quy.

Cú pháp

IsMatch( Văn bản, Mẫu [, Tùy chọn ] )

  • Văn bản – Bắt buộc. Chuỗi văn bản để kiểm tra.
  • Mẫu – Bắt buộc. Mẫu để kiểm tra ở dạng chuỗi văn bản. Nối các mẫu được xác định trước mà bảng liệt kê Match xác định hoặc cung cấp một biểu thức chính quy. Mẫu phải là công thức hằng số mà không có bất kỳ biến, nguồn dữ liệu hoặc tham chiếu động nào khác thay đổi khi ứng dụng chạy.
  • Tùy chọn – Tùy chọn. Một tổ hợp chuỗi văn bản của các giá trị trong bảng liệt kê MatchOptions. Tổ hợp mặc định là MatchOptions.Complete.

So khớp( Văn bản, Mẫu [, Tùy chọn ] )

  • Văn bản – Bắt buộc. Chuỗi văn bản để so khớp.
  • Mẫu – Bắt buộc. Mẫu để so khớp ở dạng chuỗi văn bản. Nối các mẫu được xác định trước mà bảng liệt kê Match xác định hoặc cung cấp một biểu thức chính quy. Mẫu phải là công thức hằng số mà không có bất kỳ biến, nguồn dữ liệu hoặc tham chiếu động nào khác thay đổi khi ứng dụng chạy.
  • Tùy chọn – Tùy chọn. Một tổ hợp chuỗi văn bản của các giá trị trong bảng liệt kê MatchOptions. Tổ hợp mặc định là MatchOptions.Contains.

MatchAll( Văn bản, Mẫu [, Tùy chọn ] )

  • Văn bản – Bắt buộc. Chuỗi văn bản để so khớp.
  • Mẫu – Bắt buộc. Mẫu để so khớp ở dạng chuỗi văn bản. Nối các mẫu được xác định trước mà bảng liệt kê Match xác định hoặc cung cấp một biểu thức chính quy. Mẫu phải là công thức hằng số mà không có bất kỳ biến, nguồn dữ liệu hoặc tham chiếu động nào khác thay đổi khi ứng dụng chạy.
  • Tùy chọn – Tùy chọn. Một tổ hợp chuỗi văn bản của các giá trị trong bảng liệt kê MatchOptions. Tổ hợp mặc định là MatchOptions.Contains.

Ví dụ về hàm IsMatch

Các ký tự thông thường

Hãy tưởng tượng rằng ứng dụng của bạn có công cụ điều khiển Nội dung nhập văn bản tên là TextInput1. Người dùng nhập các giá trị vào công cụ điều khiển này để lưu trữ trong cơ sở dữ liệu.

Người dùng nhập Hello world vào TextInput1.

Công thức Mô tả Kết quả
IsMatch( TextInput1.Text, "Hello world" ) Kiểm tra xem nội dung người dùng nhập có khớp chính xác với chuỗi "Hello world" hay không. ĐÚNG VẬY
IsMatch( TextInput1.Text, "Good bye" ) Kiểm tra xem nội dung người dùng nhập có khớp chính xác với chuỗi "Good bye" hay không. SAI
IsMatch( TextInput1.Text, "hello", Contains ) Kiểm tra xem nội dung người dùng nhập có chứa từ "hello" (phân biệt chữ hoa chữ thường) hay không. SAI
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Kiểm tra xem nội dung người dùng nhập có chứa từ "hello" (không phân biệt chữ hoa chữ thường) hay không. ĐÚNG VẬY

Các mẫu được xác định trước

Công thức Mô tả Kết quả
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) So khớp Số an sinh xã hội tại Hoa Kỳ ĐÚNG VẬY
IsMatch( "joan@contoso.com", Email ) So khớp địa chỉ email ĐÚNG VẬY
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) So khớp một chuỗi gồm các chữ số, một dấu chấm và sau đó không có hoặc có nhiều chữ số. ĐÚNG VẬY
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) So khớp một chuỗi gồm các chữ số, một dấu chấm và sau đó không có hoặc có nhiều chữ số. Một dấu chấm không xuất hiện trong văn bản cần so khớp. Vì vậy, mẫu này không khớp. SAI

Biểu thức chính quy

Công thức Mô tả Kết quả
IsMatch( "986", "\d+" ) So khớp một số nguyên lớn hơn 0. ĐÚNG VẬY
IsMatch( "1.02", "\d+(\.\d\d)?" ) So khớp số tiền dương. Nếu chứa dấu thập phân thì nội dung nhập cũng phải chứa hai ký tự số sau dấu thập phân. Ví dụ: 3.00 là hợp lệ, nhưng 3.1 thì không. ĐÚNG VẬY
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) So khớp số tiền dương hoặc âm. Nếu chứa dấu thập phân thì nội dung nhập cũng phải chứa hai ký tự số sau dấu thập phân. ĐÚNG VẬY
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) So khớp Số an sinh xã hội tại Hoa Kỳ. Xác thực định dạng, loại và độ dài của trường nội dung nhập được cung cấp. Chuỗi cần so khớp phải bao gồm 3 ký tự số, tiếp đến là dấu gạch ngang, sau đó là 2 ký tự số rồi đến dấu gạch ngang và 4 ký tự số. ĐÚNG VẬY
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Giống như ví dụ trước, nhưng một trong những dấu gạch nối nằm ngoài vị trí của nội dung nhập. SAI
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Xác thực một mật khẩu mạnh, phải chứa 8, 9 hoặc 10 ký tự, ngoài ra phải có ít nhất một chữ số và một chữ cái. Chuỗi không được chứa các ký tự đặc biệt. SAI

Ví dụ về hàm Match và MatchAll

Công thức Mô tả Kết quả
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Chỉ trích xuất phần email của thông tin liên lạc. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Chỉ trích xuất phần email của thông tin liên lạc. Không tìm thấy địa chỉ hợp pháp (không có dấu @). Vì vậy, hàm trả về giá trị blank (trống). trống
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Trích xuất ngôn ngữ, tập lệnh và các phần khu vực của thẻ ngôn ngữ mà hàm Language trả về. Những kết quả này phản ánh Hoa Kỳ; xem tài liệu về hàm Language để biết thêm ví dụ. Toán tử (?: nhóm các ký tự mà không tạo đoạn khớp khác. {
language: "en",
script: blank,
region: "US",
FullMatch: "en-US",
SubMatches: [ "en", "", "US" ],
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Trích xuất giờ, phút và giây từ giá trị thời lượng đạt ISO 8601. Các số được trích xuất vẫn ở dạng chuỗi văn bản; sử dụng hàm Value để chuyển đổi chuỗi đó thành một số trước khi thực hiện các phép toán. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Hãy tìm hiểu kỹ hơn ở ví dụ cuối cùng. Nếu muốn chuyển đổi chuỗi này thành giá trị ngày/giờ bằng cách sử dụng hàm Time, bạn phải chuyển từng đoạn khớp có tên. Để làm điều này, bạn có thể sử dụng hàm With cho bản ghi mà hàm Match trả về:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

Đối với những ví dụ này, hãy thêm công cụ điều khiển Button, thiết lập thuộc tính OnSelect thành công thức sau, rồi chọn nút:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Công thức Mô tả Kết quả
Match( pangram, "THE", IgnoreCase ) Tìm tất cả các nội dung khớp với "THE" trong chuỗi văn bản nằm trong biến pangram. Chuỗi chứa hai kết quả khớp, nhưng hàm chỉ trả về kết quả đầu tiên vì bạn đang sử dụng hàm Match chứ không dùng hàm MatchAll. Cột SubMatches trống vì hàm không xác định được đoạn khớp nào. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Tìm tất cả các nội dung khớp với "the" trong chuỗi văn bản nằm trong biến pangram. Hàm có phân biệt chữ hoa chữ thường, nên chỉ tìm thấy trường hợp thứ hai của "the". Cột SubMatches trống vì hàm không xác định được đoạn khớp nào. MatchAll cho pangram.
MatchAll( pangram, "the", IgnoreCase ) Tìm tất cả các nội dung khớp với "the" trong chuỗi văn bản nằm trong biến pangram. Trong trường hợp này, hàm không phân biệt chữ hoa chữ thường, nên tìm thấy cả hai trường hợp của từ này. Cột SubMatches trống vì hàm không xác định được đoạn khớp nào. MatchAll với IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Tìm tất cả các từ có 3 chữ cái có chữ "o" ở giữa. Lưu ý rằng hàm sẽ loại trừ từ "brown" vì đây không phải là một từ có ba chữ cái nên không khớp với "\b" (ranh giới từ). MatchAll cho pangram với b, wo, w và b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) So khớp tất cả các ký tự giữa "fox" và "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Để xem kết quả của hàm MatchAll trong thư viện:

  1. Trên màn hình trống, hãy thêm một công cụ điều khiển Thư viện trống, dạng dọc.

  2. Đặt thuộc tính Items của thư viện thành MatchAll( pangram, "\w+" ) hoặc MatchAll( pangram, MultipleLetters ).

    Thư viện mục.

  3. Chọn "Add an item from the Insert tab" ("Thêm một mục từ tab Chèn") ở giữa công cụ điều khiển thư viện để chọn mẫu của thư viện.

  4. Thêm công cụ điều khiển Nhãn vào mẫu của thư viện.

  5. Đặt thuộc tính Văn bản của nhãn thành ThisItem.FullMatch.

    Thư viện chứa từng từ trong văn bản mẫu của chúng tôi. Thay đổi kích thước cho công cụ điều khiển nhãn và mẫu của thư viện để xem tất cả các từ trên một màn hình.

    Thuộc tính văn bản.