Fungsi IsMatch, Match dan MatchAll
Digunakan untuk: Aplikasi kanvas Apl Power Pages Power Platform berpandukan model CLI
Ujian untuk padanan atau mengekstrak bahagian rentetan teks berdasarkan corak.
Penerangan
Fungsi IsMatch menguji sama ada rentetan teks sepadan dengan corak yang boleh terdiri daripada aksara biasa, corak pratakrif atau ungkapan biasa. Fungsi Match dan MatchAll mengembalikan perkara yang dipadankan termasuk subpadanan.
Gunakan IsMatch untuk mengesahkan perkara yang pengguna telah taip dalam kawalan Input teks. Sebagai contoh, anda boleh mengesahkan sama ada pengguna telah memasukkan alamat e-mel yang sah sebelum hasilnya disimpan ke dalam sumber data anda. Jika entri tidak sepadan dengan kriteria anda, tambahkan kawalan lain yang menggesa pengguna membetulkan entri itu.
Gunakan Match untuk mengekstrak rentetan teks pertama yang sepadan dengan corak dan MatchAll untuk mengekstrak semua rentetan teks yang sepadan. Anda juga boleh mengekstrak subpadanan untuk menguraikan rentetan kompleks.
Match mengembalikan rekod maklumat untuk padanan pertama yang ditemui dan MatchAll mengembalikan jadual rekod untuk setiap padanan yang ditemui. Rekod atau rekod mengandungi:
Column | Taip | Description |
---|---|---|
dinamakan subpadanan atau subpadanan | Teks | Setiap subpadanan yang dinamakan akan mempunyai lajurnya sendiri. Cipta subpadanan yang dinamakan dengan menggunakan (?<nama>...) dalam ungkapan biasa. Jika subpadanan yang dinamakan mempunyai bernama mempunyai nama yang sama dengan salah satu daripada lajur yang dipratakrif (di bawah), subpadanan diutamakan dan amaran dijana. Untuk mengelakkan amaran ini, namakan semula subpadanan. |
FullMatch | Teks | Semua rentetan teks yang dipadankan. |
StartMatch | Nombor | Kedudukan permulaan bagi padanan dalam rentetan teks input. Aksara pertama rentetan akan mengembalikan 1. |
SubPadanan | Jadual lajur tunggal bagi Teks (Nilai lajur) | Jadual subpadanan yang dinamakan dan tidak dinamakan mengikut urutan yang mana mereka muncul dalam ungkapan biasa. Secara umumnya, subpadanan yang dinamakan lebih senang dikendalikan dan digalakkan. Gunakan fungsi ForAll atau fungsi Last( FirstN( ... ) ) untuk bekerja dengan subpadanan individu. Jika tidak ada subpadanan yang ditakrifkan dalam ungkapan biasa, jadual ini akan wujud tetapi kosong. |
Fungsi ini menyokong MatchOptions. Secara lalai:
- Fungsi ini melaksanakan padanan sensitif huruf. Gunakan MatchOptions.IgnoreCase untuk melaksanakan padanan kes yang tidak sensitif.
- IsMatch padan dengan keseluruhan rentetan teks (Lengkap MatchOption), manakala carian Match dan MatchAll untuk padanan di mana-mana sahaja dalam rentetan teks (Mengandungi MatchOption). Gunakan Lengkap, Mengandungi, BeginsWith atau EndsWith sesuai untuk senario anda.
IsMatch mengembalikan benar jika rentetan teks sepadan dengan corak atau palsu jika ia tidak. Match mengembalikan kosong jika tiada padanan ditemui yang boleh diuji dengan fungsi IsBlank. MatchAll mengembalikan jadual kosong jika tidak ada padanan yang boleh diuji dengan fungsi IsEmpty.
Jika anda menggunakan MatchAll untuk memisahkan rentetan teks, pertimbangkan untuk menggunakan fungsi Split yang lebih mudah digunakan dan lebih pantas.
Corak
Kunci untuk menggunakan fungsi ini adalah dengan memerihalkan corak yang sepadan. Anda memerihalkan corak dalam rentetan teks sebagai gabungan:
- Aksara biasa, seperti "abc" atau "123".
- Corak yang dipratakrif, seperti Surat, MultipleDigits atau E-mel. (Penghitungan Padanan mentakrifkan corak ini.)
- Kod ungkapan biasa seperti "\d+\s+\d+" atau "[a-z]+".
Gabungkan unsur-unsur ini dengan menggunakan operator penyambungan rentetan&. Contohnya, "abc" & Digit & "\s+" ialah corak sah yang sepadan dengan aksara "a", "b", dan "c", diikuti dengan digit daripada 0 kepada 9, diikuti dengan sekurang-kurangnya satu aksara ruang putih.
Aksara biasa
Corak termudah adalah jujukan aksara biasa yang dipadankan dengan tepat.
Sebagai contoh, apabila digunakan dengan fungsi IsMatch, rentetan "Helo" sepadan dengan corak "Helo" secara tepat. Tiada lebih dan tiada kurang. Rentetan "helo!" tidak sepadan dengan corak kerana titik seru di hujung dan kerana kes salah untuk huruf "h". (Lihat MatchOptions untuk cara bagi mengubah suai tingkah laku.)
Dalam bahasa corak, aksara tertentu dikhaskan untuk tujuan khas. Untuk menggunakan aksara ini, sama ada letakkan awalan pada aksara dengan \ (miring balik) untuk menunjukkan bahawa aksara harus diambil secara literal atau gunakan salah satu corak yang dipratakrif kemudian dalam topik ini. Jadual ini menyenaraikan aksara khas:
Aksara khas | Description |
---|---|
. | titik atau noktah |
? | tanda soal |
* | asterisk |
+ | campur |
( ) | kurungan |
[ ] | kurungan berpetak |
{ } | tanda kurung ikal |
^ | karet |
$ | tanda dolar |
| | bar atau paip menegak |
\ | miring balik |
Contohnya, anda boleh memadankan "Helo?" dengan menggunakan corak "Helo\?" dengan miring balik sebelum tanda soal.
Corak dipratakrif
Corak yang dipratakrif menyediakan cara mudah untuk padanan sama ada salah satu daripada sekumpulan aksara atau urutan berbilang aksara. Gunakan operator penyambungan rentetan& untuk menggabungkan rentetan teks anda sendiri dengan ahli enum Padan :
Padankan enum | Penerangan | Pernyataan biasa |
---|---|---|
Any | Padankan sebarang aksara. | . |
Comma | Padankan koma. | , |
Digit | Padankan digi tunggal ("0" melalui "9"). | \d |
Memadankan alamat e-mel yang mengandungi simbol "at" ("@") dan nama domain yang mengandungi titik (".") | .+\@.+\\.[^\\.]{2,} |
|
Hyphen | Padankan tanda sempang. | \- |
LeftParen | Padankan kiri tanda kurung "(". | \( |
Letter | Padankan huruf. | \p{L} |
MultipleDigits | Padankan satu atau lebih digit. | \d+ |
MultipleLetters | Padankan satu atau lebih huruf. | \p{L}+ |
MultipleNonSpaces | Padankan satu atau lebih aksara yang tidak menambah ruang kosong (bukan ruang, tab atau baris baharu). | \S+ |
MultipleSpaces | Padankan satu atau lebih aksara yang menambah ruang kosong (ruang, tab atau baris baharu). | \s+ |
NonSpace | Padankan aksara tunggal yang tidak menambah ruang kosong. | \S |
OptionalDigits | Padankan sifar, satu atau lebih digit. | \d* |
OptionalLetters | Padankan sifar, satu atau lebih huruf. | \p{L}* |
OptionalNonSpaces | Padankan sifar, satu atau lebih aksara yang tidak menambah ruang kosong. | \S* |
OptionalSpaces | Padankan sifar, satu atau lebih aksara yang menambah ruang kosong. | \s* |
Period | Padankan tempoh atau titik ("."). | \. |
RightParen | Padankan kanan tanda kurung "(". | \) |
Space | Padankan aksara yang menambah ruang kosong. | \s |
Tab | Sepadan dengan aksara tab. | \t |
Sebagai contoh, corak "A" & MultipleDigits akan sepadan dengan huruf "A" diikuti dengan satu atau lebih digit.
Ungkapan biasa
Corak yang fungsi ini gunakan adalah ungkapan biasa. Aksara biasa dan corak pratakrif yang diterangkan lebih awal dalam topik ini membantu membina ungkapan biasa.
Ungkapan biasa adalah sangat mantap, tersedia dalam banyak bahasa pengaturcaraan dan digunakan untuk pelbagai tujuan yang meluas. Ia juga sering kelihatan seperti jujukan rawak tanda baca. Artikel ini tidak menerangkan semua aspek ungkapan biasa tetapi banyak maklumat, tutorial dan alat tersedia pada web.
Ungkapan biasa terdapat dalam pelbagai dialek dan Power Apps menggunakan dialek JavaScript. Lihat sintaks ungkapan biasa untuk pengenalan kepada sintaks. Subpadanan yang dinamakan (kadang-kadang dipanggil kumpulan rakaman yang bernama) adalah disokong:
- Subpadanan yang dinamakan: (?<nama> ...)
- Rujukan balik yang dinamakan: \k<nama>
Dalam jadual Match enum lebih awal dalam topik ini, setiap enum akan muncul dalam baris yang sama dengan ungkapan biasa yang sepadan.
Pilihan padanan
Anda boleh mengubah suai kelakuan fungsi ini dengan menentukan satu atau lebih opsyen, yang boleh anda gabungkan menggunakan operator penyambungan rentetan (&&).
MatchOptions enum | Description | Kesan ke atas ungkapan biasa |
---|---|---|
MatchOptions.BeginsWith | Corak mestilah padan dari awal teks. | Tambah ^ hingga permulaan ungkapan biasa. |
MatchOptions.Complete | Lalai untuk IsMatch. Corak mesti padan dengan keseluruhan rentetan teks, dari awal sehingga akhir. | Tambah ^ pada permulaan $ sehingga akhir ungkapan biasa. |
MatchOptions.Mengandungi | Lalai untuk Match and MatchAll. Corak mesti muncul di suatu tempat dalam teks tetapi tidak perlu memulakan atau mengakhirinya. | Tidak mengubah suai ungkapan biasa. |
MatchOptions.EndsWith | Corak mesti sepadan dengan hujung rentetan teks. | Tambah $ hingga akhir ungkapan biasa. |
MatchOptions.IgnoreCase | Memperlakukan huruf besar dan huruf kecil sama. Pemadanan adalah sensitif huruf secara lalai. | Tidak mengubah suai ungkapan biasa. Pilihan ini adalah setara dengan pengubah suai standard "i" untuk ungkapan biasa. |
MatchOptions.Multiline | Padankan merentasi pelbagai baris. | Tidak mengubah suai ungkapan biasa. Pilihan ini adalah setara dengan pengubah suai standard "m" untuk ungkapan biasa. |
Menggunakan MatchAll adalah setara dengan menggunakan pengubahsuai standard "g" untuk ungkapan biasa.
Sintaks
IsMatch( Teks, Corak [, Pilihan ] )
- Teks – Diperlukan. Rentetan teks untuk diuji.
- Corak – Diperlukan. Corak untuk diuji sebagai rentetan teks. Corak pratakrif perangkaian yang Match enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
- Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Complete digunakan.
Match( Teks, Corak [, Pilihan ] )
- Teks – Diperlukan. Rentetan teks untuk padanan.
- Corak – Diperlukan. Corak untuk padanan sebagai rentetan teks. Corak pratakrif perangkaian yang Padanan enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
- Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Contains digunakan.
MatchAll( Teks, Corak [, Pilihan ] )
- Teks – Diperlukan. Rentetan teks untuk padanan.
- Corak – Diperlukan. Corak untuk padanan sebagai rentetan teks. Corak pratakrif perangkaian yang Padanan enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
- Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Contains digunakan.
Contoh IsMatch
Aksara biasa
Bayangkan bahawa aplikasi anda mengandungi kawalan Input teks yang dinamakan TextInput1. Pengguna memasukkan nilai ke dalam kawalan ini untuk disimpan dalam pangkalan data.
Jenis pengguna Helo dunia ke dalam TextInput1.
Formula | Penerangan | Hasil |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Menguji sama ada input pengguna padan, tepat, rentetan "Helo dunia". | benar |
IsMatch( TextInput1.Text, "Good bye" ) |
Menguji sama ada input pengguna padan, tepat, rentetan "Selamat tinggal". | palsu |
IsMatch( TextInput1.Text, "hello", Contains ) |
Menguji sama ada input pengguna mengandungi perkataan "helo" (sensitif huruf). | palsu |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Menguji sama ada input pengguna mengandungi perkataan "helo" (tidak sensitif huruf). | benar |
Corak dipratakrif
Formula | Penerangan | Hasil |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Padankan Nombor Keselamatan Sosial Amerika Syarikat | benar |
IsMatch( "joan@contoso.com", Email ) |
Padankan alamat e-mel | benar |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Padankan jujukan digit, tempoh dan kemudian sifar atau lebih digit. | benar |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Padankan jujukan digit, tempoh dan kemudian sifar atau lebih digit. Titik tidak muncul dalam teks untuk dipadankan, jadi corak ini tidak sesuai. | palsu |
Ungkapan biasa
Formula | Penerangan | Hasil |
---|---|---|
IsMatch( "986", "\d+" ) |
Padakan integer yang lebih besar daripada sifar. | benar |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Padankan jumlah mata wang positif. Jika input mengandungi titik perpuluhan, input juga mesti mengandungi dua aksara angka setelah titik perpuluhan. Sebagai contoh, 3.00 adalah sah, tetapi 3.1 tidak. | benar |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Padankan jumlah mata wang positif atau negatif. Jika input mengandungi titik perpuluhan, input juga mesti mengandungi dua aksara angka setelah titik perpuluhan. | benar |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Padankan Nombor Keselamatan Sosial Amerika Syarikat. Mengesahkan format, jenis dan panjang medan input yang dibekalkan. Rentetan untuk dipadankan mesti terdiri daripada tiga aksara nombor diikuti dengan tanda sengkang, kemudian dua aksara angka diikuti dengan tanda sengkang, dan kemudian empat aksara nombor. | benar |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Sama seperti contoh sebelumnya, tetapi salah satu daripada tanda sempang berada di luar temat dalam input. | palsu |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Mengesahkan kata laluan yang kuat, yang mesti mengandungi lapan, sembilan atau 10 aksara, selain itu sekurang-kurangnya satu digit dan sekurang-kurangnya satu aksara abjad. Rentetan tidak boleh mengandungi aksara khas. | palsu |
Contoh Padanan dan MatchAll
Formula | Penerangan | Hasil |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Hanya mengekstrak bahagian e-mel maklumat kenalan. | { e-mel: "bob.jones@contoso.com", FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Hanya mengekstrak bahagian e-mel maklumat kenalan. Tidak ada alamat sah yang ditemui (tidak ada tanda @), sehingga fungsi kembali blank. | kosong |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Mengekstrak bahagian bahasa, skrip dan rantau tag bahasa yang fungsi Language akan dikembalikan. Hasil ini menunjukkan Amerika Syarikat; lihat Language function documentation untuk lebih banyak contoh. (?: aksara kumpulan operator tanpa mencipta subpadanan 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, minit dan saat daripada nilai tempoh ISO 8601. Nombor yang diekstrak masih dalam rentetan teks; menggunakan fungsi Value untuk menukarnya menjadi nombor sebelum operasi matematik dilaksanakan di atasnya. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubPadanan:["2","1","39"], StartMatch: 1 } |
Mari kita teliti contoh terakhir. Jika anda ingin menukar rentetan ini kepada nilai tarikh/waktu menggunakan fungsi Time, anda mesti menghantar dalam subpadanan yang dinamakan secara individu. Untuk melakukan ini, anda boleh menggunakan fungsi With operasi pada rekod yang Padanan akan dikembalikan:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
Untuk contoh ini, tambah kawalan Butang, tetapkan sifat OnSelect untuk formula ini, dan kemudian pilih butang:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formula | Penerangan | Hasil |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Cari semua padanan "THE" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Rentetan mengandungi dua padanan, tetapi hanya yang pertama dikembalikan kerana anda menggunakan Match dan bukan MatchAll. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Cari semua padanan "the" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Ujian ini sensitif huruf, jadi hanya tika kedua "the" yang ditemui. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. | |
MatchAll( pangram, "the", IgnoreCase ) |
Cari semua padanan "the" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Dalam kes ini, ujian adalah kes tidak sensitif, jadi kedua-dua tika perkataan ditemui. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Mencari semua perkataan tiga huruf dengan huruf "o" di tengah. Perhatikan bahawa "coklat" dikecualikan kerana bukan perkataan tiga huruf dan, oleh itu, gagal untuk dipadankan "\ b" (batas kata). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Padamkan semua aksara antara "rubah" dan "anjing". | { antara: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Untuk melihat MatchAll dalam galeri:
Pada skrin kosong, sisipkan menegak kosong kawalan Galeri control.
Tetapkan sifat Item untuk MatchAll( pangram, "\w+" ) atau MatchAll( pangram, BerbilangHuruf ).
Pilih "Tambahkan item dari tab Sisipkan" di tengah-tengah kawalan galeri untuk memilih templat galeri.
Tambah kawalan Label pada templat galeri.
Lihat label sifat Teks untuk ThisItem.FullMatch.
Galeri dipenuhi dengan setiap perkataan dalam teks contoh kami. Saiz semula templat galeri dan kawalan label untuk melihat semua perkataan pada satu skrin.
Maklum balas
https://aka.ms/ContentUserFeedback.
Akan datang: Sepanjang 2024, kami akan menghentikan secara berperingkat Isu GitHub sebagai kaedah maklum balas untuk kandungan dan menggantikannya dengan sistem maklum balas baharu. Untuk mendapatkan maklumat lanjut lihat:Kirim dan lihat maklum balas untuk