Die IsMatch-Funktion in PowerApps ermöglicht es dir zu überprüfen, ob eine Zeichenfolge einem bestimmten Format entspricht oder nicht. Sie ist sehr nützlich, wenn es darum geht, die Eingabe von Benutzertexten in einem Formular zu validieren.
Zum Beispiel muss der Benutzer eine E-Mail-Adresse angeben. Mit der PowerApps IsMatch-Funktion kannst du prüfen, ob die bereitgestellte E-Mail-Adresse das richtige Format einer E-Mail-Adresse hat. Andere häufige Anwendungsfälle könnten eine Telefonnummer, die URL einer Website oder jede Art von Kennungen sein.
Die IsMatch-Funktion ermöglicht es dir, einfache Textabschnitte, reguläre Ausdrücke und vordefinierte Muster zu verwenden.
Diese Anleitung erklärt die IsMatch-Funktion und bietet gängige Beispiele für Anwendungsfälle wie die oben erwähnte E-Mail, Telefonnummer, URL und mehr.
- Syntax
- Vordefinierte Muster
- Match Options
- Sonderzeichen
- IsMatch und Variablem im Muster
- IsMatch und Delegation
- IsMatch negieren – kein Match
- IsMatch mit regulären Ausdrücken
- IsMatch mit einem Datum
- IsMatch für eine Uhrzeit
- IsMatch für eine E-Mail-Adresse
- IsMatch für eine Telefonnummer
- IsMatch URL
- Syntax
- Funktionsbeispiele
- MatchAll Funktionsbeispiel
Die IsMatch-Funktion vergleicht einen Text mit einem angegebenen Muster. Muster können einfache Textabschnitte, reguläre Ausdrücke, vordefinierte Muster oder eine Kombination mehrerer vordefinierter Muster sein. Das Ergebnis ist „true“, wenn der Text dem Muster entspricht, und „false“, wenn das Muster nicht übereinstimmt.
Syntax
IsMatch( Text, Pattern [, Options ] )
Eingabeparameter
- Text (erforderlich): Der Text, den du gegen ein Muster validieren möchtest.
- Pattern (erforderlich): Ein Muster zum Abgleich des gegebenen Textes. Hinweis: Eine Variable im IsMatch-Muster ist nicht erlaubt.
- Options (optional): Die Option ermöglicht es dir, festzulegen, wie das Muster angewendet wird. Zulässige Einträge sind alle Werte der MatchOptions-Auflistung, die BeginsWith | Contains | EndsWith | IgnoreCase | Multiline | Complete (Standard) sind.
Rückgabewert
- true: Wenn das Muster übereinstimmt.
- false: Wenn das Muster NICHT übereinstimmt.
Vordefinierte Muster
Reguläre Ausdrücke sind schwer zu lesen und für jemanden, der sie nicht täglich verwendet, schwer zu pflegen. Daher stellt Microsoft einige vordefinierte Muster zur Verfügung, die reguläre Ausdrücke mit selbsterklärenden Namen darstellen. Diese vordefinierten Muster können mit dem „&“ kombiniert werden, wie im folgenden Beispiel gezeigt:
// example to validate a price with predefined patterns
IsMatch(
"21.78",
MultipleDigits & Period & Digit & Digit
); // => true
Um einen Überblick über die vorhandenen vordefinierten Muster und deren Verwendung zu erhalten, hier sind einige Beispiele:
Spezial
Es gibt vordefinierte Muster für gängige Sonderzeichen wie Komma, Bindestrich und Punkt. Zusätzlich gibt es einen Matcher für „any“, der jedes beliebige Zeichen darstellen kann (any = 1 Zeichen).
- Any
- Comma
- Hyphen
- Period
Hier ein Anwendungsbeispiel:
IsMatch(
"!,-.",
Any & Comma & Hyphen & Period
) // => true
Letters
Für Buchstaben gibt es drei dedizierte vordefinierte Muster:
- Letter
- MultipleLetters
- OptionalLetters
Hier zwei Anwendungsbeispiele:
IsMatch(
"a.abc.as",
Letter & Period & MultipleLetters & Period & OptionalLetters
); // => true
IsMatch(
"a.abc.",
Letter & Period & MultipleLetters & Period & OptionalLetters
); // => true
Digits
Für Ziffern gibt es entsprechende vordefinierte Muster:
- Digit
- MultipleDigits
- OptionalDigits
Die Verwendung ist im Wesentlichen dieselbe wie für die Buchstabenmuster:
IsMatch(
"1.123.1",
Digit & Period & MultipleDigits & Period & OptionalDigits
) // => true
IsMatch(
"1.123.",
Digit & Period & MultipleDigits & Period & OptionalDigits
) // => true
Spaces
Für Leerzeichen gibt es einige vordefinierte Matcher.
- MultipleNonSpaces(1 oder mehrere Zeichen, die kein Leerzeichen sind)
- MultipleSpaces (1 oder mehrere Leerzeichen)
- NonSpace (1 Zeichen, das kein Leerzeichen ist)
- OptionalNonSpaces (0 oder mehrere Zeichen, die kein Leerzeichen sind))
- OptionalSpaces (0 oder 1 Leerzeichen)
- Space (ein Leerzeichen)
Hier ist ein Beispiel, das alle vordefinierten Muster für Leerzeichen verwendet.
IsMatch(
"a1. .a.. . ",
MultipleNonSpaces & Period & MultipleSpaces & Period & NonSpace & Period & OptionalNonSpaces & Period & OptionalSpaces & Period & Space
) // => true
Klammern
Es gibt nur vordefinierte Matcher für klassische Klammern:
- LeftParen
- RightParen
Die Verwendung ist leicht verständlich:
IsMatch(
"(123)",
LeftParen & MultipleDigits & RightParen
) // => true
E-Mail-Adressen
Für E-Mails gibt es einen vordefinierten Matcher:
Die Verwendung erklärt sich von selbst:
IsMatch(
"[email protected]",
Email
) // => true
Match Options
Complete
Im Gegensatz zur Contains-Option ist standardmäßig die Complete-Option für IsMatch eingestellt. Das bedeutet, dass eine exakte Übereinstimmung vorhanden sein muss.
IsMatch(
"abc",
"abc"
); => true
IsMatch(
"abc",
"ab"
); => false
Contains
ie Contains-Option definiert, dass die Übereinstimmung als „true“ bewertet wird, wenn die Übereinstimmung irgendwo im Text gefunden wird.
IsMatch(
"abc",
"ab",
Contains
); => true
BeginsWith & EndsWith
Die BeginsWith-Option ist nur dann „true“, wenn das Muster am Anfang der Zeichenfolge übereinstimmt.
IsMatch(
"abc",
"a",
BeginsWith
); => true
IsMatch(
"abc",
"b",
BeginsWith
); => false
Die EndsWith-Option ist nur dann „true“, wenn das Muster am Ende der Zeichenfolge übereinstimmt.
IsMatch(
"abc",
"c",
EndsWith
); => true
IsMatch(
"abc",
"a",
EndsWith
); => false
IgnoreCase
Um die Groß- und Kleinschreibung für Übereinstimmungen zu ignorieren, verwende die IgnoreCase-Option. Übereinstimmungen werden als „true“ bewertet, unabhängig davon, ob Klein- oder Großbuchstaben verwendet werden.
// IsMatch with IgnoreCase options
IsMatch(
"ABC",
"abc",
IgnoreCase
); => true
// IsMatch without IgnoreCase options
IsMatch(
"ABC",
"abc"
); => false
Sonderzeichen
Muster können einfache Textübereinstimmungen sein:
IsMatch("abc","abc"); // => true
Muster können auch reguläre Ausdrücke sein:
IsMatch( "123", "\d+" ); // => true
In regulären Ausdrücken haben einige Zeichen eine besondere Bedeutung (wie ‚\ ‚ und ‚+‘ im Beispiel).
Um die spezielle Bedeutung nicht auszulösen, musst du diese Zeichen mit einem Backslash ‚\ ‚ escapen, falls du das reguläre Ausdrucksverhalten nicht auslösen möchtest, wie hier:
// escaping of special characters is missing, does not match
IsMatch(
"(1 + 2) * 1 = 3 ?",
"(1 + 2) * 1 = 3 ?"
); // => false
// correct escaping of special characerts
IsMatch(
"(1 + 2) * 1 = 3 ?",
"\(1 \+ 2\) \* 1 = 3 \?"
); // => true
Liste der Sonderzeichen
Das sind alle Zeichen, die du mit einem Backslash escapen musst:
- . (Punkt)
- ? (Fragezeichen)
- * (Stern)
- + (Pluszeichen)
- ( ) (Klammern)
- [ ] (eckige Klammern)
- { } (geschweifte Klammern)
- ^ (Zirkumflex)
- $ (Dollarzeichen)
- | (enkrechter Balken)
- \ (backslash)
IsMatch und Variablem im Muster
Leider kann der Musterstring keine Variable sein. Etwas wie dies wird nicht funktionieren:
Set(POSITIVE_NUMBER_REGEX,"\d+");
IsMatch( "123", POSITIVE_NUMBER_REGEX); // !! Nicht erlaubt !!
Dies führt zu einem Fehler des Typs „Regular expressions must be constant values“.
Hoffentlich wird sich das in Zukunft ändern. Im Moment wird es nicht unterstützt, Variablen innerhalb von Mustern zu verwenden.
IsMatch und Delegation
Die IsMatch-Funktion ist keine delegierbare Funktion. Daher solltest du die IsMatch-Funktion nicht auf großen Datensätzen verwenden, egal welche Datenquelle du verwendest. Suche stattdessen nach delegierbaren Alternativen für IsMatch in Filter- oder Lookup-Funktionsaufrufen in SharePoint-Listen wie ‚=‘, ‚<>‘, StartsWith usw.
PowerApps IsMatch-Beispiele
IsMatch negieren – kein Match
Manchmal möchtest du überprüfen, ob es KEINE Übereinstimmung gibt. Dies kann erreicht werden, indem du das Ausrufezeichen oder die Not-Funktion verwendest, wie in den folgenden IsMatch-Beispielen gezeigt.
// exclamation mark
!IsMatch("abc", "abc"); // => false
// Not function
Not(IsMatch("abc", "abc")); // => false
IsMatch mit regulären Ausdrücken
Reguläre Ausdrücke sind sehr leistungsstark. Du findest reguläre Ausdrücke für die meisten Formate im Web. Dennoch sind sie schwer zu lesen und zu formulieren. Hier ist ein sehr einfaches Beispiel für positive Zahlen.
IsMatch( "123", "\d+" ); // => true
IsMatch mit einem Datum
In einem Formular ist der beste Weg, sicherzustellen, dass das richtige Datumsformat vorliegt, die Bereitstellung eines von einem Kalender gesteuerten Datumsfeldes. Dennoch kann es Fälle geben, in denen du sicherstellen musst, dass eine Zeichenfolge ein bestimmtes korrektes Datumsformat hat.
Die Datumsformate unterscheiden sich in verschiedenen Ländern, und es werden unterschiedliche Formate verwendet.
Die folgenden Skripts zeigen, wie du einige der häufigeren Datumsformate mit regulären Ausdrücken validieren kannst.
// YYYY-MM-DD
IsMatch("2022-02-23","\d{4}-\d{2}-\d{2}"); // => true
// YYYY/MM/DD
IsMatch("2022/02/23","\d{4}/\d{2}/\d{2}") // => true
// MM/DD/YYYY
IsMatch("04/21/2008","\d{2}/\d{2}/\d{4}"); // => true
// MM-DD-YYYY
IsMatch("04-21-2008","\d{2}-\d{2}-\d{4}"); // => true
IsMatch für eine Uhrzeit
Aufgrund der Vielfalt der Uhrzeitformate gibt es nicht ein einziges Zeitmuster, das alle abdeckt. Durch Verwendung von regulären Ausdrücken kannst du dein Zeitformat definieren. Der folgende Ausdruck kann als Ausgangspunkt verwendet werden.
IsMatch("11:00 AM", "\d{1,2}\:\d{2}\ (AM|PM)"); // => true
IsMatch("4:00 PM", "\d{1,2}\:\d{2}\ (AM|PM)"); // => true
IsMatch für eine E-Mail-Adresse
IsMatch("[email protected]", Match.Email); // => true
IsMatch für eine Telefonnummer
Das Format von Telefonnummern variiert von Land zu Land. Um eine Telefonnummer mit der IsMatch-Funktion zu validieren, kannst du einen regulären Ausdruck verwenden. Das folgende Beispiel kann für das amerikanische Telefonnummerformat verwendet werden.
Wenn du den regulären Ausdruck für ein anderes Land benötigst, suche im Internet nach dem regulären Ausdruck für das Telefonnummerformat deines Landes. Teile gerne deine Ergebnisse mit, damit ich sie hier für andere hinzufügen kann.
// Validiere nordamerikanische Telefonnummern
IsMatch(
"123-456-7890",
"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$"
); // => true
Quelle des regulären Ausdrucks: O’REILLY Regular Expressions Cookbook
IsMatch URL
Dies ist ein Beispiel für eine IsMatch-Funktion für eine HTTP-URL. Beachte, dass nur ‚http‘ und ‚https‘ übereinstimmen werden. Andere Protokolle wie ‚ftp‘ werden nicht übereinstimmen.
IsMatch(
"https://zeitgeistcode.com",
"(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*))"
) // => true
Match & MatchAll Funktion
Um die Match- und MatchAll-Funktion zu verstehen, ist es wichtig, die IsMatch-Funktion zu verstehen, aufgrund der großen Überschneidung der Funktionen. Alles, was du wissen musst, wurde oben erklärt.
Der Unterschied zwischen IsMatch und Match/MatchAll besteht darin, dass IsMatch nur prüft, ob ein Muster übereinstimmt.
Match/MatchAll gibt die Übereinstimmung(en) des Musters zurück.
IsMatch ist also gut geeignet, um eine Eingabe zu validieren, während Match/MatchAll gut geeignet sind, um Übereinstimmungen in einem Text zu finden.
Der Unterschied zwischen der Match-Funktion und der MatchAll-Funktion besteht darin, dass Match die erste Übereinstimmung zurückgibt und MatchAll alle Übereinstimmungen zurückgibt.
Syntax
Match( Text, Pattern [, Options ] )
MatchAll( Text, Pattern [, Options ] )
Eingabeparameter
- Text (erforderlich): Der Text, den du gegen ein Muster validieren möchtest.
- Pattern (erforderlich): Ein Muster zum Abgleich des gegebenen Textes. Hinweis: Der Musterstring muss derzeit konstant sein. Eine Variable im IsMatch-Muster ist nicht erlaubt.
- Options (optional): Die Option ermöglicht es dir, festzulegen, wie das Muster angewendet wird. Zulässige Einträge sind alle Werte der MatchOptions-Auflistung, die BeginsWith | Contains (Standard) | EndsWith | IgnoreCase | Multiline | Complete sind.
Rückgabewert der Match-Funktion
- Wenn eine Übereinstimmung gefunden wird: Die Match-Funktion gibt einen Datensatz mit folgenden Spalten zurück:
- benannte Teilübereinstimmung(en) oder Teilübereinstimmungen: Falls es benannte Übereinstimmungen oder nicht benannte Teilübereinstimmungen gibt, werden dafür Spalten erstellt (siehe Beispiele unten).
- FullMatch: Zeichenfolge der übereinstimmenden Textes.
- StartMatch: Startindex der übereinstimmenden Zeichenfolge (beginnend bei 1 für die erste Zeichenfolge).
- SubMatches: Tabelle der Teilübereinstimmungen
- Wenn KEINE Übereinstimmung gefunden wird: Die Match-Funktion gibt einen leeren Wert zurück.
Funktionsbeispiele
Simple match
Im folgenden Beispiel suchen wir nach einer Ziffer. Die Ziffer ist die ‚1‘, das 5. Zeichen.
Set(
myMatchtes,
Match(
"paul1",
Digit
)
);
// matches a digit
/* Result:
{
FullMatch: "1"",
StartMatch: 5,
Submatches: {}
}
*/
Benannte Teilübereinstimmungen
Du kannst Teilübereinstimmungen benennen, indem du das Format (?<name>REGEX) verwendest. Im Beispiel gibt es zwei benannte Teilübereinstimmungen: Eine für die E-Mail namens ‚mail‘ und eine für das ‚Alter‘.
Set(
myMatchtes,
Match(
"[email protected];32",
"(?<mail>" & Email & ");(?<age>" & Digit & Digit & ")"
)
);
/*
{
mail: "[email protected]",
age: "32"",
FullMatch: "[email protected];32",
StartMatch: 1,
SubMatches:
{
"[email protected]",
age: "32"
}
}
*/
MatchAll Funktionsbeispiel
MatchAll gibt alle Übereinstimmungen innerhalb des Textes zurück. Da wir nach einer Ziffer suchen und es zwei Ziffern im Text gibt, erhalten wir zwei Übereinstimmungen.
Set(
myMatchtes,
MatchAll(
"paul1a4",
Digit
)
);
/*
{
{
FullMatch: "1"",
StartMatch: 5,
Submatches: {}
},
{
FullMatch: "4",
StartMatch: 7,
Submatches: {}
}
}
*/