Bagikan melalui


Fungsi IsMatch, Match, dan MatchAll

Berlaku untuk: Aplikasi kanvas Aplikasi Power Pages Power Platform berbasis model CLI

Menguji kecocokan atau mengekstrak bagian dari string teks berdasarkan pola.

KETERANGAN

Fungsi IsMatch akan menguji apakah string teks sesuai dengan pola yang terdiri dari karakter biasa, pola yang telah ditentukan sebelumnya, atau ekspresi reguler. Fungsi Match dan MatchAll mengembalikan apa yang cocok, termasuk sub-kecocokan.

Gunakan IsMatch untuk memvalidasi apa yang diketik pengguna dalam kontrol Input teks. Misalnya, Anda dapat mengonfirmasi apakah pengguna telah memasukkan alamat email yang valid sebelum hasil disimpan ke sumber data. Jika entri tidak sesuai dengan kriteria Anda, tambahkan kontrol lain yang mendorong pengguna untuk memperbaiki entri.

Gunakan Kecocokan untuk mengekstrak string teks pertama yang cocok dengan pola dan MatchAll untuk mengekstrak semua string teks yang sesuai. Anda juga dapat mengekstrak sub-kecocokan untuk mengurai string kompleks.

Match menghasilkan rekaman informasi untuk kecocokan pertama yang ditemukan, dan MatchAll menghasilkan tabel rekaman untuk setiap kecocokan yang ditemukan. Rekaman tersebut atau rekaman berisi:

Column Tipe Description
subkecocokan bernama atau subkecocokan SMS Masing-masing sub-kecocokan bernama akan memiliki kolomnya sendiri. Buat sub-kecocokan bernama menggunakan (?<nama>...) dalam ekspresi reguler. Jika sub-kecocokan bernama memiliki nama yang sama dengan salah satu kolom yang ditentukan sebelumnya (di bawah), sub-kecocokan akan didahulukan, dan peringatan akan dibuat. Untuk menghindari peringatan ini, ganti nama sub-kecocokan.
FullMatch Teks Semua string teks yang cocok.
StartMatch Nomor Posisi awal kecocokan dalam string teks input. Karakter pertama string menghasilkan 1.
SubMatches Tabel kolom tunggal Teks (Nilai kolom) Tabel subkecocokan bernama dan tidak bernama dalam urutan yang ditampilkan dalam ekspresi reguler. Umumnya, nama sub-kecocokan lebih mudah digunakan dan didorong untuk digunakan. Gunakan fungsi ForAll atau fungsi Last( FirstN( ... ) ) untuk bekerja dengan sub-kecocokan individu. Jika tidak ada sub-kecocokan yang didefinisikan dalam ekspresi reguler, tabel ini akan tersedia, tetapi kosong.

Fungsi ini mendukung MatchOptions. Secara default:

  • Fungsi ini melakukan pencocokan peka huruf besar kecil. Gunakan MatchOptions.IgnoreCase untuk melakukan pencocokan yang tidak peka huruf besar/kecil.
  • IsMatch mencocokkan seluruh string teks (Complete MatchOption), sementara Match dan MatchAll mencari kecocokan di mana saja dalam string teks (Contains MatchOption). Gunakan Complete, Contains, BeginsWith, atau EndsWith yang sesuai untuk skenario Anda.

IsMatch menghasilkan true jika string teks sesuai dengan pola atau false jika tidak sesuai. Match menghasilkan blank jika tidak ditemukan kecocokan yang dapat diuji dengan fungsi IsBlank. MatchAll menghasilkan tabel kosong jika tidak ditemukan kecocokan yang dapat diuji dengan fungsi IsEmpty.

Jika Anda menggunakan MatchAll untuk memisahkan string teks, pertimbangkan menggunakan fungsi Split yang lebih cepat dan lebih mudah digunakan.

Pola

Kunci untuk menggunakan fungsi ini adalah dalam menggambarkan pola yang sesuai. Anda menggambarkan pola dalam string teks sebagai kombinasi dari:

  • Karakter biasa, seperti "abc" atau "123".
  • Pola yang telah ditentukan sebelumnya, seperti Letter, MultipleDigits, atau Email. (Enum Match menentukan pola ini.)
  • Kode ekspresi reguler, misalnya "\d+\s+\d+" or "[a-z]+".

Gabungkan elemen-elemen ini dengan menggunakan operator string-concatenation&. Misalnya, "abc" &; Digit & "\s+" adalah pola valid yang cocok dengan karakter "a", "b", dan "c", diikuti oleh digit dari 0 hingga 9, diikuti oleh setidaknya satu karakter spasi.

Karakter biasa

Pola yang paling sederhana adalah urutan karakter biasa yang akan dicocokkan dengan tepat.

Misalnya, bila digunakan dengan fungsi IsMatch, string "Hello" cocok dengan pola Hello secara persis. Tidak lebih dan tidak kurang. String "hello!" tidak cocok dengan pola karena tanda seru di akhir dan karena kasus salah untuk huruf "h". (Lihat MatchOptions untuk mengetahui cara memodifikasi perilaku ini.)

Dalam bahasa pola, karakter tertentu dicadangkan untuk tujuan khusus. Untuk menggunakan karakter ini, baik awalan karakter dengan \ (garis miring terbalik) untuk menunjukkan bahwa karakter harus diambil secara harfiah, atau gunakan salah satu pola yang telah ditentukan sebelumnya yang dijelaskan nanti dalam topik ini. Tabel ini berisi daftar karakter khusus:

Karakter khusus Description
. tanda titik
? tanda tanya
* tanda bintang
+ plus
( ) tanda kurung
[ ] tanda kurung siku
{ } tanda kurung kurawal
^ caret
$ tanda dolar
| panel atau pipa vertikal
\ garis miring terbalik

Misalnya, Anda dapat mencocokkan "hello?" dengan menggunakan pola "Hello\?" dengan backslash sebelum tanda tanya.

Pola yang ditentukan sebelumnya

Pola yang ditentukan sebelumnya memberikan cara mudah untuk mencocokkan salah satu dari rangkaian karakter atau urutan beberapa karakter. Gunakan operator penggabungan string& untuk menggabungkan string teks Anda sendiri dengan anggota enum Match :

Enum kecocokan KETERANGAN Ekspresi reguler
Any Mencocokkan karakter apa pun. .
Comma Mencocokkan koma. ,
Digit Mencocokkan satu digit ("0" hingga "9"). \d
email Mencocokkan alamat email yang berisi simbol "pada" ("@") dan nama domain yang berisi titik (".") .+\@.+\\.[^\\.]{2,}
Hyphen Mencocokkan tanda hubung. \-
LeftParen Mencocokkan tanda kurung kiri "(". \(
Letter Mencocokkan huruf. \p{L}
MultipleDigits Mencocokkan satu atau beberapa digit. \d+
MultipleLetters Mencocokkan satu atau beberapa huruf. \p{L}+
MultipleNonSpaces Mencocokkan satu atau beberapa karakter yang tidak menambahkan spasi (bukan spasi, tab, atau baris baru). \S+
MultipleSpaces Mencocokkan satu atau beberapa karakter yang menambahkan spasi (bukan spasi, tab, atau baris baru). \s+
NonSpace Cocok dengan satu karakter yang tidak menambahkan spasi. \S
OptionalDigits Mencocokkan nol, satu, atau beberapa digit. \d*
OptionalLetters Mencocokkan nol, satu, atau beberapa huruf. \p{L}*
OptionalNonSpaces Mencocokkan nol, satu, atau beberapa karakter yang tidak menambahkan spasi. \S*
OptionalSpaces Mencocokkan nol, satu, atau beberapa karakter yang menambahkan spasi. \s*
Period Mencocokkan tanda titik ("."). \.
RightParen Mencocokkan tanda kurung kanan ")". \)
Space Mencocokkan karakter yang menambahkan spasi. \s
Tab Cocok dengan karakter tab. \t

Misalnya, pola "A" &; MultipleDigits akan cocok dengan huruf "A" diikuti oleh satu digit atau lebih.

Ekspresi reguler

Pola yang digunakan fungsi ini adalah ekspresi reguler. Karakter biasa dan pola standar yang dijelaskan sebelumnya dalam topik membantu membuat ekspresi reguler.

Ekspresi reguler sangat kuat, tersedia dalam banyak bahasa pemrograman, dan digunakan untuk berbagai keperluan. Ekspresi ini juga dapat sering terlihat seperti urutan tanda baca acak. Artikel ini tidak menjelaskan semua aspek ekspresi reguler, namun banyak informasi, tutorial, dan alat tersedia di web.

Ekspresi reguler tersedia dalam dialek yang berbeda, dan Power Apps menggunakan varian dari dialek JavaScript. Lihat sintaks ekspresi reguler untuk pengantar sintaks. Sub-kecocokan bernama (terkadang disebut sebagai grup pengambilan gambar) didukung:

  • Sub-kecocokan bernama: (?<name> ...)
  • Back reference bernama: \k<name>

Di tabel enum Kecocokan sebelumnya di topik ini, setiap enum akan ditampilkan di baris yang sama seperti ekspresi reguler yang sesuai.

Opsi kecocokan

Anda dapat mengubah perilaku fungsi-fungsi ini dengan menentukan satu atau beberapa opsi, yang dapat Anda gabungkan dengan menggunakan operator rangkaian string (&).

Enum MatchOptions Description Dampak pada ekspresi reguler
MatchOptions.BeginsWith Pola harus cocok dari awal teks. Menambahkan ^ ke awal ekspresi reguler.
Opsi Pertandingan.Lengkap Default untuk IsMatch. Pola harus cocok dengan keseluruhan string teks, mulai dari awal hingga akhir. Menambahkan ^ ke awal dan $ ke akhir ekspresi reguler.
MatchOptions.Berisi Default untuk Match dan MatchAll. Pola harus muncul di suatu tempat dalam teks namun tidak perlu memulai atau mengakhirinya. Tidak mengubah ekspresi reguler.
MatchOptions.EndsWith Pola harus cocok dengan bagian akhir string teks. Menambahkan $ ke akhir ekspresi reguler.
MatchOptions.IgnoreCase Memperlakukan huruf besar dan huruf kecil sebagai sama. Secara default, pencocokan peka huruf besar-kecil. Tidak mengubah ekspresi reguler. Pilihan ini setara dengan pengubah "i" standar untuk ekspresi reguler.
MatchOptions.Multiline Mencocokkan di beberapa baris. Tidak mengubah ekspresi reguler. Pilihan ini setara dengan pengubah "m" standar untuk ekspresi reguler.

Menggunakan MatchAll setara dengan menggunakan pengubah "g" standar untuk ekspresi reguler.

Sintaks

IsMatch( Teks, Pola [, Opsi ] )

  • Text – Wajib. String teks yang akan diuji.
  • Pattern – Wajib. Pola yang akan diuji sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pattern harus berupa formula konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
  • Options – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Complete digunakan.

Match( Teks, Pola [, Opsi ] )

  • Text – Wajib. String teks yang akan dicocokkan.
  • Pattern – Wajib. Pola yang akan dicocokkan sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pattern harus berupa formula konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
  • Options – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Contains digunakan.

MatchAll( Teks, Pola [, Opsi ] )

  • Text – Wajib. String teks yang akan dicocokkan.
  • Pattern – Wajib. Pola yang akan dicocokkan sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pattern harus berupa formula konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
  • Options – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Contains digunakan.

Contoh IsMatch

Karakter biasa

Bayangkan bahwa aplikasi Anda berisi kontrol Input teks bernama TextInput1. Pengguna memasukkan nilai ke kontrol ini untuk disimpan dalam database.

Pengguna mengetik Hello world ke TextInput1.

Rumus KETERANGAN Hasil
IsMatch( TextInput1.Text, "Hello world" ) Uji apakah input pengguna cocok, persis, string "Hello world". true
IsMatch( TextInput1.Text, "Good bye" ) Uji apakah input pengguna cocok, persis, string "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Uji apakah input pengguna berisi kata "hello" (peka huruf besar-kecil). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Uji apakah input pengguna berisi kata "hello" (tidak peka huruf besar-kecil). true

Pola yang ditentukan sebelumnya

Rumus KETERANGAN Hasil
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Mencocokkan Nomor Jaminan Sosial Amerika Serikat true
IsMatch( "joan@contoso.com", Email ) Mencocokkan Alamat email true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Mencocokkan urutan digit, tanda titik, dan kemudian angka nol atau digit lainnya. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Mencocokkan urutan digit, tanda titik, dan kemudian angka nol atau digit lainnya. Tanda titik tidak muncul di teks yang akan dicocokkan, sehingga pola ini tidak cocok. false

Ekspresi reguler

Rumus KETERANGAN Hasil
IsMatch( "986", "\d+" ) Mencocokkan nilai bilangan bulat lebih dari nol. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Mencocokkan jumlah mata uang positif. Jika input berisi titik desimal, input juga harus berisi dua karakter numerik setelah titik desimal. Misalnya, 3,00 berlaku, namun 3,1 tidak. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Mencocokkan jumlah mata uang positif atau negatif. Jika input berisi titik desimal, input juga harus berisi dua karakter numerik setelah titik desimal. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Mencocokkan nomor Jaminan Sosial Amerika Serikat. Memvalidasi format, jenis, dan panjang dari bidang input yang tersedia. String yang akan dicocokkan harus terdiri dari tiga karakter numerik diikuti tanda hubung, lalu dua karakter numerik diikuti tanda hubung, lalu empat karakter numerik. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Sama seperti contoh sebelumnya, namun salah satu tanda hubung keluar tidak pada tempatnya di input. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Memvalidasi sandi yang kuat, yang harus berisi delapan, sembilan, atau 10 karakter, di samping setidaknya satu digit dan setidaknya satu karakter alfabet. String tidak boleh berisi karakter khusus. false

Contoh Match dan MatchAll

Rumus KETERANGAN Hasil
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Mengekstrak hanya bagian email dari informasi kontak. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Mengekstrak hanya bagian email dari informasi kontak. Tidak ada alamat hukum yang ditemukan (tidak ada tanda @), sehingga fungsi menghasilkan blank. kosong
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Mengekstrak bagian bahasa, skrip, dan wilayah dari tag bahasa yang dihasilkan fungsi Language. Hasil ini mencerminkan Amerika Serikat; lihat dokumentasi fungsi Language untuk contoh lainnya. Karakter grup operator (?: tanpa membuat sub-kecocokan lain. {
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)?" ) Mengekstrak jam, menit, dan detik dari nilai durasi ISO 8601. Nomor yang diekstrak masih dalam string teks; gunakan fungsi Value untuk mengonversinya ke angka sebelum operasi matematika dilakukan padanya. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Mari telusuri contoh terakhir. Jika Anda ingin mengonversi string ini ke nilai tanggal/waktu menggunakan fungsi Time, Anda harus meneruskan dalam sub-kecocokan bernama secara terpisah. Untuk melakukannya, Anda dapat menggunakan fungsi With yang beroperasi pada rekaman yang menghasilkan Kecocokan:

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

Untuk contoh ini, tambahkan kontrol Tombol, atur properti OnSelect ke rumus ini, lalu pilih tombol:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Rumus KETERANGAN Hasil
Match( pangram, "THE", IgnoreCase ) Cari semua kecocokan "THE" dalam string teks yang berisi variabel pangram. String berisi dua kecocokan, namun hanya yang pertama yang dihasilkan karena Anda menggunakan Match dan bukan MatchAll. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Cari semua kecocokan "the" dalam string teks yang berisi variabel pangram. Pengujian peka terhadap huruf besar-kecil, sehingga hanya instans kedua "the" yang ditemukan. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. MatchAll untuk pangram.
MatchAll( pangram, "the", IgnoreCase ) Cari semua kecocokan "the" dalam string teks yang berisi variabel pangram. Dalam kasus ini, pengujian tidak peka terhadap huruf besar-kecil, sehingga kedua instans dari kata tersebut ditemukan. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. MatchAll dengan IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Menemukan semua kata tiga huruf dengan "o" di tengah. Perhatikan bahwa "brown" dikecualikan karena bukan kata tiga huruf dan, karenanya, gagal mencocokkan "\b" (word boundary). MatchAll untuk pangram dengan b, wo, w dan b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Mencocokkan semua karakter antara "fox" dan "dog". {
antara: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Untuk melihat hasil MatchAll di Galeri:

  1. Di layar kosong, masukkan kontrol Galeri vertikal kosong.

  2. Atur properti Item galeri ke MatchAll( pangram, "\w+" ) atau MatchAll( pangram, MultipleLetters ).

    Galeri item.

  3. Pilih "Tambahkan item dari tab Insert" di bagian tengah kontrol galeri untuk memilih template galeri.

  4. Tambahkan kontrol Label ke template galeri.

  5. Atur properti Teks label ke ThisItem.FullMatch.

    Galeri diisi dengan setiap kata dalam contoh teks kami. Ubah ukuran template galeri dan kontrol label agar dapat melihat semua kata tersebut dalam satu layar.

    Properti teks.