PowerApps IsMatch-Funktion erklärt (mit Match & MatchAll)

PowerApps IsMatch Funktion

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.

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:

  • Email

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“.

Regular expressions must be constant values
Fehler „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: {}
  }
}
*/

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert