Funzioni IsMatch, Match e MatchAll
Si applica a: App Canvas App basate su modello Power Pages Power Platform CLI
Verifica la presenza di una corrispondenza o estrae parti di una stringa di testo in base a un modello.
Descrizione
La funzione IsMatch verifica se una stringa di testo corrisponde a un modello che può contenere caratteri ordinari, modelli predefiniti o un'espressione regolare. Le funzioni Match e MatchAll restituiscono le corrispondenze, incluse quelle secondarie.
Utilizzare IsMatch per convalidare ciò che un utente ha digitato in un controllo Text input. Ad esempio, è possibile verificare se l'utente ha immesso un indirizzo di posta elettronica valido prima che il risultato venga salvato nell'origine dati. Se l'immissione non corrisponde ai criteri, aggiungere altri controlli che richiedono all'utente di correggerla.
Usare Incontro per estrarre la prima stringa di testo che corrisponde a un modello e MatchAll per estrarre tutte le stringhe di testo corrispondenti. È anche possibile estrarre le corrispondenze secondarie per analizzare stringhe complesse.
Match restituisce un record di informazioni per la prima corrispondenza trovata e MatchAll restituisce una tabella di record per ogni corrispondenza trovata. Il record o i record contengono:
Column | Type | Descrizione |
---|---|---|
sotto-corrispondenze denominate o sotto-corrispondenze | Testo | Ogni corrispondenza secondaria con nome avrà una propria colonna. Creare una corrispondenza secondaria usando (?<nome>...) nell'espressione regolare. Se una corrispondenza secondaria con nome ha lo stesso nome di una delle colonne predefinite (seguenti), la corrispondenza secondaria ha la precedenza e viene generato un avviso. Per evitare questo avviso, rinominare la corrispondenza secondaria. |
Partita completa | Testo | Tutta la stringa di testo corrispondente. |
IniziaPartita | Numero | La posizione iniziale della corrispondenza nella stringa di testo di input. Il primo carattere della stringa restituisce 1. |
Sottopartite | Tabella a colonna singola di testo (colonna Valore) | La tabella delle corrispondenze secondarie con nome e senza nome nell'ordine in cui appaiono nell'espressione regolare. In genere, le corrispondenze secondarie con nome sono più facili da utilizzare e sono consigliate. Utilizzare la funzione ForAll o Last( FirstN( ...) ) per utilizzare una singola corrispondenza secondaria. Se nessuna corrispondenza secondaria è definita nell'espressione regolare, questa tabella sarà presente ma vuota. |
Queste funzioni supportano matchOptions. Per impostazione predefinita:
- Queste funzioni eseguono una corrispondenza con distinzione tra maiuscole e minuscole. Utilizzare MatchOptions.IgnoreCase per eseguire corrispondenze senza distinzione tra maiuscole e minuscole.
- IsMatch corrisponde all'intera stringa di testo (Complete MatchOption), mentre Match e MatchAll cercano una corrispondenza in qualsiasi punto della stringa di testo (Contains MatchOption). Utilizzare Complete, Contains, BeginsWith o EndsWith come appropriato per il proprio scenario.
IsMatch restituisce true se la stringa di testo corrisponde al modello oppure false se non lo fa. Match restituisce blank se non viene trovata alcuna corrispondenza che può essere testata con la funzione IsBlank . MatchAll restituisce una tabella vuota se non viene trovata alcuna corrispondenza che può essere testata con la funzione IsEmpty .
Se si utilizza MatchAll per dividere una stringa di testo, considerare l'utilizzo della funzione Split, che è più semplice da usare e più veloce.
Modelli
La chiave per l'uso di queste funzioni è descrivere il criterio di corrispondenza. Si descrive il modello in una stringa di testo come una combinazione di:
- Caratteri normali, ad esempio "abc" o "123".
- Modelli predefiniti, ad esempio Letter, MultipleDigits o Email. L'enumerazione Match definisce questi modelli.
- Codici di espressioni regolari, ad esempio "\d+\s+\d+" o "[a-z]+".
Combina questi elementi usando l'operatore di concatenazione delle stringhe &. Ad esempio, "abc" & Digit & "\s+" è un modello valido che corrisponde ai caratteri "a", "b" e "c", seguiti da una cifra da 0 a 9, seguita da almeno uno spazio vuoto.
Caratteri ordinari
Il modello più semplice è una sequenza di caratteri normali che devono corrispondere esattamente.
Ad esempio, se utilizzata con la funzione IsMatch, la stringa "Hello" corrisponde esattamente al modello Hello. Non più e non meno. La stringa "hello!" non corrisponde al modello a causa del punto esclamativo alla fine e della "h" minuscola. Vedere MatchOptions per informazioni su come modificare questo comportamento.
Nel linguaggio del modello, alcuni caratteri sono riservati per scopi speciali. Per usare questi caratteri, aggiungere un prefisso al carattere con una \ (barra rovesciata) per indicare che il carattere deve essere considerato letteralmente oppure usare uno dei modelli predefiniti come descritto in seguito in questo argomento. Questa tabella elenca i caratteri speciali:
Carattere speciale | Descrizione |
---|---|
. | punto |
? | punto interrogativo |
* | asterisco |
+ | più |
( ) | parentesi |
[ ] | parentesi quadre |
{ } | parentesi graffe |
^ | caret |
$ | simbolo di dollaro |
| | barra verticale o pipe |
\ | barra rovesciata |
Ad esempio, puoi abbinare "Hello?" utilizzando il modello "Hello\?" con una barra rovesciata prima del punto interrogativo.
Modelli predefiniti
I modelli predefiniti offrono un modo semplice per trovare la corrispondenza tra un set di caratteri o una sequenza di più caratteri. Usa l'operatore di concatenazione delle stringhe & per combinare stringhe di testo con i membri dell'enumerazione Match:
Enumerazione Match | Descrizione | Espressione regolare |
---|---|---|
Qualunque | Corrisponde a qualsiasi carattere. | . |
Virgola | Corrisponde a una virgola. | , |
Cifra | Corrisponde a una cifra singola (da "0" a "9"). | \d |
Corrisponde a un indirizzo di posta elettronica che contiene un simbolo ("@") e un nome di dominio che contiene un punto (".") | .+\@.+\\.[^\\.]{2,} |
|
Trattino | Corrisponde a un trattino. | \- |
Parentesi sinistra | Corrisponde a una parentesi "(" aperta. | \( |
Lettera | Corrisponde a una lettera. | \p{L} |
Cifre multiple | Corrisponde a una o più cifre. | \d+ |
Lettere multiple | Corrisponde a una o più lettere. | \p{L}+ |
MultiploNonSpazi | Corrisponde a uno o più caratteri che non aggiungono uno spazio vuoto (non spazio, tabulazione, nuova riga). | \S+ |
Spazi multipli | Corrisponde a uno o più caratteri che aggiungono uno spazio vuoto (spazio, tabulazione o nuova riga). | \s+ |
NonSpazio | Corrisponde a un singolo carattere che non aggiunge uno spazio vuoto. | \S |
Cifre facoltative | Corrisponde a zero, a una o a più cifre. | \d* |
Lettere facoltative | Corrisponde a zero, a una o a più lettere. | \p{L}* |
OpzionaleNonSpazi | Corrisponde a zero, a uno o a più caratteri che non aggiungono uno spazio vuoto. | \S* |
Spazi facoltativi | Corrisponde a zero, a uno o a più caratteri che aggiungono uno spazio vuoto. | \s* |
Periodo | Corrisponde a un punto ("."). | \. |
Parentesi Destra | Corrisponde a una parentesi ")" chiusa. | \) |
Spazio | Corrisponde a un carattere che aggiunge uno spazio vuoto. | \s |
Scheda | Corrisponde a un carattere della scheda. | \t |
Ad esempio, il modello "A" & MultipleDigits corrisponderà alla lettera "A" seguita da una o più cifre.
Espressioni regolari
Il modello utilizzato da queste funzioni è un'espressione regolare. I caratteri ordinari e i modelli predefiniti illustrati precedentemente in questo articolo consentono di creare espressioni regolari.
Le espressioni regolari sono molto efficaci, sono disponibili in molti linguaggi di programmazione e sono usate per molti scopi. Spesso possono anche apparire come una sequenza casuale di segni di punteggiatura. Questo articolo non illustra tutti gli aspetti delle espressioni regolari. Sul Web è possibile trovare un'ampia gamma di informazioni, esercitazioni e strumenti.
Le espressioni regolari sono disponibili in dialetti diversi e Power Apps usa una variante del dialetto JavaScript. Vedere Sintassi delle espressioni regolari per un'introduzione alla sintassi. Sono supportate le corrispondenze secondarie con nome (a volte denominate gruppi di acquisizione con nome):
- Corrispondenze secondarie con nome: (?<nome> ...)
- Backreferenze con nome: \k<nome>
Nella tabella di enumerazioni Match vista precedentemente in questo argomento, ogni enumerazione appare nella stessa riga della relativa espressione regolare corrispondente.
Opzioni di corrispondenza
Puoi modificare il comportamento di queste funzioni specificando una o più opzioni, che puoi combinare usando l'operatore di concatenazione di stringhe (&).
Enumerazione MatchOptions | Descrzione | Impatto su un'espressione regolare |
---|---|---|
MatchOptions.IniziaCon | Il modello deve corrispondere dall'inizio del testo. | Aggiunge un simbolo ^ all'inizio dell'espressione regolare. |
Opzioni di corrispondenza.Completo | Valore predefinito di IsMatch. Il modello deve corrispondere all'intera stringa di testo, dall'inizio alla fine. | Aggiunge un simbolo ^ all'inizio e un simbolo $ alla fine di un'espressione regolare. |
MatchOptions.Contiene | Valore predefinito di Match e MatchAll. Il modello deve essere incluso in una posizione qualsiasi nel testo e non necessariamente all'inizio o alla fine. | Non modifica l'espressione regolare. |
OpzioniCorrispondenza.TerminaCon | Il modello deve corrispondere alla fine della stringa di testo. | Aggiunge un simbolo $ alla fine dell'espressione regolare. |
MatchOptions.Ignora caso | Gestisce le lettere maiuscole e minuscole come identiche. Per impostazione predefinita, la corrispondenza fa distinzione tra lettere maiuscole e minuscole. | Non modifica l'espressione regolare. Questa opzione è l'equivalente del modificatore "i" standard per le espressioni regolari. |
Opzioni di corrispondenza.Multiline | Trova la corrispondenza su più righe. | Non modifica l'espressione regolare. Questa opzione è l'equivalente del modificatore "m" standard per le espressioni regolari. |
L'uso di MatchAll equivale a utilizzare il modificatore "g" standard per le espressioni regolari.
Sintassi
IsMatch( Testo, Modello [, Opzioni ] )
- Testo – Obbligatorio. La stringa di testo da verificare.
- Modello – Obbligatorio. Il modello da verificare come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Il pattern deve essere una formula costante, senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
- Opzioni – Facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Complete.
Corrispondenza( Testo, Modello [, Opzioni ] )
- Testo – Obbligatorio. La stringa di testo per la quale trovare una corrispondenza.
- Modello – Obbligatorio. Il modello per cui trovare una corrispondenza come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Il pattern deve essere una formula costante, senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
- Opzioni – Facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Contains.
MatchAll( Testo, Modello [, Opzioni ] )
- Testo – Obbligatorio. La stringa di testo per la quale trovare una corrispondenza.
- Modello – Obbligatorio. Il modello per cui trovare una corrispondenza come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Il pattern deve essere una formula costante, senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
- Opzioni – Facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Contains.
Esempi di IsMatch
Caratteri ordinari
Si supponga che l'applicazione contenga un controllo Text input denominato TextInput1. L'utente immette i valori in questo controllo da archiviare in un database.
L'utente digita Hello world in TextInput1.
Formula | Descrizione | Risultato |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Verifica se l'input dell'utente corrisponde esattamente alla stringa "Hello world". | VERO |
IsMatch( TextInput1.Text, "Good bye" ) |
Verifica se l'input dell'utente corrisponde esattamente alla stringa "Good bye". | falso |
IsMatch( TextInput1.Text, "hello", Contains ) |
Verifica se l'input dell'utente contiene la parola "hello" (distinzione tra lettere maiuscole e minuscole). | falso |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Verifica se l'input dell'utente contiene la parola "hello" (senza distinzione tra lettere maiuscole e minuscole). | VERO |
Modelli predefiniti
Formula | Descrizione | Risultato |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Corrisponde a un codice fiscale degli Stati Uniti | VERO |
IsMatch( "joan@contoso.com", Email ) |
Corrisponde a un indirizzo di posta elettronica | VERO |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Corrisponde a una sequenza di cifre, un punto, quindi zero o più cifre. | VERO |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Corrisponde a una sequenza di cifre, un punto, quindi zero o più cifre. Dato che il punto non è incluso nel testo, il modello non corrisponde. | falso |
Espressioni regolari
Formula | Descrizione | Risultato |
---|---|---|
IsMatch( "986", "\d+" ) |
Corrisponde a un numero intero maggiore di zero. | VERO |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Corrisponde a un importo di valuta positivo. Se l'input contiene un separatore decimale, deve anche contenere due caratteri numerici dopo il separatore decimale. Ad esempio, 3,00 è valido, ma non 3,1. | VERO |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Corrisponde a un importo di valuta positivo o negativo. Se l'input contiene un separatore decimale, deve anche contenere due caratteri numerici dopo il separatore decimale. | VERO |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Corrisponde a un codice fiscale degli Stati Uniti. Convalida il formato, il tipo e la lunghezza del campo di input specificato. La stringa per la quale si intende trovare una corrispondenza deve avere tre caratteri numerici seguiti da un trattino, due caratteri numerici seguiti da un trattino e quindi quattro caratteri numerici. | VERO |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Come nell'esempio precedente, ma uno dei trattini non è nella posizione corretta nell'input. | falso |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Convalida una password complessa, che deve contenere otto, nove o 10 caratteri, almeno una cifra e almeno un carattere alfabetico. La stringa non deve contenere caratteri speciali. | falso |
Esempi di Match e MatchAll
Formula | Descrizione | Risultato |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Estrae solo la parte e-mail delle informazioni di contatto. | { email: "bob.jones@contoso.com", FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Estrae solo la parte e-mail delle informazioni di contatto. Non è stato trovato alcun indirizzo legale (non è presente alcun segno @), quindi la funzione restituisce blank. | vuoto |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Estrae la lingua, lo script e l'area geografica del tag di lingua che la funzione Language restituisce. Questi risultati riflettono gli Stati Uniti; vedere la documentazione relativa alla funzione Language per ulteriori esempi. L'operatore (?: raggruppa i caratteri senza creare un'altra corrispondenza secondaria. | { 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)?" ) |
Estrae le ore, i minuti e i secondi da un valore di durata ISO 8601. I numeri estratti sono ancora in una stringa di testo; usare la funzione Value per convertirla in numero prima di eseguire operazioni matematiche sulla stessa. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Esploriamo l'ultimo esempio. Se si desidera convertire questa stringa in un valore data/ora utilizzando la funzione Time, è necessario passare individualmente le corrispondenze secondarie con nome. A questo proposito, è possibile usare la funzione With sul record che Match restituisce:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
Per questi esempi, aggiungere un controllo Button, impostare la relativa proprietà OnSelect su questa formula, quindi selezionare il pulsante:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formula | Descrizione | Risultato |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Trovare tutte le corrispondenze di "THE" nella stringa di testo che la variabile pangram contiene. La stringa contiene due corrispondenze, ma viene restituita solo la prima poiché si sta utilizzando Match e non MatchAll. La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Trovare tutte le corrispondenze di "the" nella stringa di testo che la variabile pangram contiene. Il test fa distinzione tra maiuscole e minuscole, quindi viene trovata solo la seconda istanza di "the". La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. | |
MatchAll( pangram, "the", IgnoreCase ) |
Trovare tutte le corrispondenze di "the" nella stringa di testo che la variabile pangram contiene. In questo caso, il test non fa distinzione tra maiuscole e minuscole, quindi vengono trovate entrambe le istanze della parola. La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Trova tutte le parole di tre lettere con una "o" nel mezzo. Si noti che "brown" è escluso perché non è una parola di tre lettere e, pertanto, non corrisponde a "\b" (limite di parole). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Cerca la corrispondenza con tutti i caratteri tra "fox" e "dog". | { between: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Per vedere i risultati di MatchAll in una raccolta:
In una schermata vuota, inserire un controllo Gallery vuota verticale.
Impostare la proprietà Items della raccolta su MatchAll( pangram, "\w+" ) o MatchAll( pangram, MultipleLetters ).
Selezionare "Aggiungi un elemento dalla scheda Inserisci" al centro del controllo gallery per selezionare il modello della raccolta.
Aggiungere un controllo Label al modello della raccolta.
Impostare la proprietà Text dell'etichetta su ThisItem.FullMatch.
La raccolta viene riempita con ogni parola nel testo di esempio. Ridimensionare il modello della raccolta e il controllo Label per visualizzare tutte le parole in una schermata.