IsMatch-, Match- ja MatchAll-funktio

Koskee seuraavia: Pohjaan perustuvat sovellukset Mallipohjaiset sovellukset Power Platform CLI

Testaa vastaavuutta tai poimii tekstimerkkijonon osat kaavan perusteella.

Kuvaus

IsMatch-funktio testaa, vastaako merkkijono hakuarvoa, joka voi koostua normaaleista merkeistä, esimääritetyistä malleista tai säännönmukaisesta lausekkeesta. Match- ja MatchAll-funktiot palauttavat kohdistetun kohteen, mukaan lukien alivastineet.

Käytä IsMatch-funktiota vahvistamaan käyttäjän Text input-ohjausobjektiin syöttämä sisältö. Voit esimerkiksi vahvistaa, onko käyttäjä syöttänyt kelvollisen sähköpostiosoitteen, ennen kuin tulokset tallennetaan tietolähteeseesi. Jos tietue ei vastaa kriteereitäsi, lisää muita ohjausobjekteja, jotka kehottavat käyttäjää korjaamaan sen.

Voit purkaa ensimmäisen vastaavan tekstimerkkijonon Match- ja kaikki vastaavat tekstimerkkijonot MatchAll-menetelmällä. Voit myös poimia alivastaavuuksia monimutkaisten merkkijonojen jäsentämiseksi.

Match palauttaa ensimmäisen löydettyjen tietojen tietueen, ja MatchAll palauttaa tietuetaulukon jokaista löydettyjä vastineita varten. Tietue tai tietueet sisältävät seuraavat tiedot:

Column Type Description
named sub‑match or sub‑matches Viesti Kullakin nimetyllä alivastaavuudella on oma sarakkeensa. Luo nimetty alivastine käyttämällä (?<name>...) säännönmukaisessa lausekkeessa. Jos nimetyn alivastineen nimi on sama kuin jokin esimääritetyistä sarakkeista (alla), alivastine on ensisijainen ja järjestelmä luo varoituksen. Voit välttää tämän varoituksen nimeämällä alivastineen uudelleen.
FullMatch Teksti Koko vastaavuuksien tekstimerkkijono.
StartMatch Luku Vastineen aloitus kohta syötetekstimerkkijonossa. Merkkijonon ensimmäinen merkki palauttaa 1.
SubMatches Yksisarakkeinen Teksti-taulukko (sarake Value) Taulukko nimetyistä ja nimeämättömistä alivastineista siinä järjestyksessa, jossa ne näkyvät säännönmukaisessa lausekkeessa. Yleensä nimetyt alivastaavuudet on helpompi käsitellä ja niitä kannustetaan käyttämään. Käytä ForAll-funktiota tai Last( FirstN( ... ) )-funktioita työstääksesi yksittäistä alivastaavuutta. Jos säännöllisessä lausekkeessa ei ole määritetty alivastaavuuksia, tämä taulukko on tyhjä.

Nämä toiminnot tukevat MatchOptions-toimintoa. Oletusarvoisesti:

  • Nämä toiminnot suorittavat kirjainkoon mukaisen vastaavuuden. Käytä MatchOptions.IgnoreCase-toimintoa, kun haluat suorittaa kirjainkoon mukaiset vastaavuudet.
  • IsMatch vastaa koko tekstimerkkijonon (Complete MatchOption), kun taas Match ja MatchAll ja etsi vastaavuutta missä tahansa tekstimerkkijonossa (Contains MatchOption). Käytä Complete-, Contains-, BeginsWith- tai EndsWith-määritteitä tarpeen mukaan.

IsMatch palauttaa arvon tosi, jos merkkijono vastaa mallia ja arvon epätosi, jos se ei vastaa sitä. Match palauttaa arvon tyhjä, jos ei löydy vastaavuutta, joka voidaan testata IsBlank-funktiolla. MatchAll palauttaa tyhjäm taulukon, jos ei löydy vastaavuutta, joka voidaan testata IsEmpty-funktiolla.

Jos käytät MatchAll-funktiota tekstimerkkijonon jakamiseen, harkitse Split- funktion käyttämistä, mikä on yksinkertaisempaa ja nopeampaa.

Mallit

Näiden funktioiden käytössä on tärkeää kuvailla malli, johon syötettä verrataan. Malli kuvaillaan merkkijonona, joka voi sisältää yhdistelmän seuraavia:

  • Tavalliset merkit, kuten "abc" tai "123".
  • Esimääritetyt mallit, kuten Letter, MultipleDigits tai Email. (Match-luettelointi määrittelee nämä mallit.)
  • Säännöllisen lausekkeen koodit, kuten "\d+\s+\d+" tai "[a-z]+".

Yhdistä näitä elementtejä käyttämällä merkkijonon yhdistämisoperaattoria &. Esimerkiksi "abc" & Digit & "\s+" on kelvollinen kaava, joka vastaa merkkijonoa, jonka alussa on "a", "b" tai "c", jonka jälkeen on numero väliltä 0–9 ja sitten vähintään yksi välilyöntimerkki.

Tavalliset merkit

Yksinkertaisin malli on sarja tavallisia merkkejä, joille haetaan täyttä vastaavuutta.

Jos esimerkiksi käytetään IsMatch-funktion kanssa, merkkijono "Hello" vastaa mallia "Hello" täsmälleen. Ei enempää tai vähempää. Merkkijono hello! ei vastaa mallia lopussa olevan huutomerkin ja h-kirjaimen väärän kirjainkoon vuoksi. (Katso kohdasta MatchOptions tapoja tämän toiminnon muokkaamiseksi.)

Mallikielessä tietyt merkit on varattu erityistoimintoja varten. Jos haluat käyttää näitä merkkejä mallissa, lisää merkin vasemmalle puolelle \ (kenoviiva) ilmaisemaan, että merkki tulee tulkita kirjaimellisesti tai käytä yhtä esimääritetyistä malleista (esitetty myöhemmin tässä aiheessa). Erikoismerkit on lueteltu tässä taulukossa:

Erikoismerkki Kuvaus
. piste
? kysymysmerkki
* tähti
+ plus
( ) sulkeet
[ ] hakasulkeet
{ } kaarisulkeet
^ sirkumfleksi
$ dollarimerkki
| pystyviiva tai putkimerkki
\ kenoviiva

Esimerkiksi Hello?-vastine voidaan löytää käyttämällä mallia Hello\?, jossa kenoviiva on ennen kysymysmerkkiä.

Esimääritetyt mallit

Esimääritettyjen mallien avulla voidaan yksinkertaisesti etsiä vastaavuuksia joko yhdelle merkkijoukon merkeistä tai usean merkin sarjalle. Käytä merkkijonon yhdistämisoperaattoria &omien merkkijonojen yhdistämiseksi Match-luetteloinnin jäsenten kanssa:

Match-luettelointi Kuvaus Säännöllinen lauseke
Any Vastaa mitä tahansa merkkiä. .
Comma Vastaa pilkkua. ,
Digit Vastaa yhtä numeroa (0–9). \d
Email Vastaa sähköpostiosoitetta, joka sisältää at-merkin (@) ja toimialuenimen, joka sisältää pisteen (.) .+\@.+\\.[^\\.]{2,}
Hyphen Vastaa yhdysmerkkiä. \-
LeftParen Vastaa vasenta suljetta ”(”. \(
Letter Vastaa kirjainta. \p{L}
MultipleDigits Vastaa yhtä tai useampaa numeroa. \d+
MultipleLetters Vastaa yhtä tai useampaa kirjainta. \p{L}+
MultipleNonSpaces Vastaa yhtä tai useampaa merkkiä, joka ei ole välilyöntimerkki (ei välilyönti, sarkain tai uusi rivi). \S+
MultipleSpaces Vastaa yhtä tai useampaa välilyöntimerkkiä (välilyönti, sarkain tai uusi rivi). \s+
NonSpace Vastaa yhtä merkkiä, joka ei ole välilyöntimerkki. \S
OptionalDigits Vastaa nollaa, yhtä tai useampaa merkkiä. \d*
OptionalLetters Vastaa nollaa, yhtä tai useampaa kirjainta. \p{L}*
OptionalNonSpaces Vastaa nollaa, yhtä tai useampaa merkkiä, jotka eivät ole välilyöntimerkkejä. \S*
OptionalSpaces Vastaa nollaa, yhtä tai useampaa välilyöntimerkkiä. \s*
Period Vastaa pistettä (”.”). \.
RightParen Vastaa oikeaa suljetta ”)”. \)
Space Vastaa välilyöntimerkkiä. \s
Tab Vastaa sarkainmerkkiä. \t

Esimerkiksi malli "A" & MultipleDigits vastaa kirjainta ”A”, jonka jälkeen esiintyy yksi tai useampi numero.

Säännönmukaiset lausekkeet

Näiden funktioiden käyttmä malli on säännöllinen lauseke. Yllä kuvatut tavalliset merkit ja esimääritetyt mallit (kuvattu aiemmin tässä aiheessa) auttavat rakentamaan säännönmukaisen lausekkeen.

Säännönmukaiset lausekkeet ovat hyvin tehokkaita, ne ovat saatavilla useissa ohjelmointikielissä ja niitä käytetään useisiin eri tarkoituksiin. Ne voivat myös usein näyttää sattumanvaraiselta välimerkkien jonolta. Tässä artikkelissa ei kuvailla kaikkia säännönmukaisten lausekkeiden ominaisuuksia, mutta verkossa on saatavilla suuri määrä tietoja, oppaita ja työkaluja.

Säännönmukaisille lausekkeille on eri kielioppivaihtoehtoja. Power Apps käyttää JavaScript-kieliopin muunnelmaa. Syntaksin esittely on artikkelissa säännönmukaisen lausekkeen syntaksi. Nimettyjä alivastaavuuksia (kutsutaan joskus nimiksi sieppausryhmiksi) tuetaan:

  • Nimetyt alivastaavuudet: (?<name> ...)
  • Nimetyt taustaviittaukset: \k<name>

Aiemmin tässä aiheessa Match-luettelointi-taulukossa kukin luettelointi näkyy samalla rivillä kuin sitä vastaava säännöllinen lauseke.

Vastaavuusvalinnat

Voit muokata näiden funktioiden toimintaa määrittämällä yhden tai useamman valinnan, joita voidaan yhdistellä käyttämällä merkkijonon yhdistämisoperaattoria (&).

MatchOptions-luettelointi Description Vaikutus säännönmukaiseen lausekkeeseen
MatchOptions.BeginsWith Mallin on vastattava tekstin alkua. Lisää säännönmukaisen lausekkeen alkuun ^-merkin.
MatchOptions.Complete IsMatch-oletusarvo. Tämän mallin täytyy vastata koko tekstimerkkijonoa alusta loppuun. Lisää säännönmukaisen merkkijonon alkuun ^-merkin ja loppuun $-merkin.
MatchOptions.Contains Match- ja MatchAll-oletusarvo. Tämän mallin täytyy olla jossakin kohdassa tekstiä mutta sen ei tarvitse olla alussa tai lopussa. Ei muokkaa säännönmukaista lauseketta.
MatchOptions.EndsWith Mallin on vastattava tekstimerkkijonon loppua. Lisää säännönmukaisen lausekkeen loppuun $-merkin.
MatchOptions.IgnoreCase Käsittelee isoja ja pieniä kirjaimia identtisinä. Oletuksena vastaavuuksissa kirjainkoko on merkitsevä. Ei muokkaa säännönmukaista lauseketta. Tämä vaihtoehto vastaa säännöllisten lausekkeiden i-vakiomääritettä.
MatchOptions.Multiline Etsii vastaavuutta useilta riveiltä. Ei muokkaa säännönmukaista lauseketta. Tämä vaihtoehto vastaa säännöllisten lausekkeiden m-vakiomääritettä.

MatchAll-menetelmän käyttäminen vastaa säännönmukaisten lausekkeiden vakiotyyppistä g-määritettä.

Syntaksi

IsMatch( Teksti, Pattern [, Options ] )

  • Text – Pakollinen. Testattava merkkijono.
  • Pattern – Pakollinen. Testattava malli merkkijonona. Yhdistele Match-luetteloinnin määrittelemiä malleja tai anna säännönmukainen lauseke. Pattern-kuvion on oltava vakiokaava, jolla ei ole muuttujia, tietolähteitä tai muita dynaamisia viittauksia, jotka muuttuvat sovelluksen suorituksen aikana.
  • Options – Valinnainen. Merkkijonoyhdistelmä MatchOptions-luetteloinnin arvoista. Oletuksena käytetään valintaa MatchOptions.Complete.

Match( Teksti, Pattern [, Options ] )

  • Text – Pakollinen. Vastaavuukisen suhteen testattava merkkijono.
  • Pattern – Pakollinen. Vastaavuuden malli merkkijonona. Yhdistele Match-luetteloinnin määrittelemiä malleja tai anna säännönmukainen lauseke. Pattern-kuvion on oltava vakiokaava, jolla ei ole muuttujia, tietolähteitä tai muita dynaamisia viittauksia, jotka muuttuvat sovelluksen suorituksen aikana.
  • Options – Valinnainen. Merkkijonoyhdistelmä MatchOptions-luetteloinnin arvoista. Oletuksena käytetään valintaa MatchOptions.Contains.

MatchAll( Teksti, Pattern [, Options ] )

  • Text – Pakollinen. Vastaavuukisen suhteen testattava merkkijono.
  • Pattern – Pakollinen. Vastaavuuden malli merkkijonona. Yhdistele Match-luetteloinnin määrittelemiä malleja tai anna säännönmukainen lauseke. Pattern-kuvion on oltava vakiokaava, jolla ei ole muuttujia, tietolähteitä tai muita dynaamisia viittauksia, jotka muuttuvat sovelluksen suorituksen aikana.
  • Options – Valinnainen. Merkkijonoyhdistelmä MatchOptions-luetteloinnin arvoista. Oletuksena käytetään valintaa MatchOptions.Contains.

IsMatch-esimerkkejä

Tavalliset merkit

Kuvitellaan, että sovelluksesi sisältää Text input-ohjausobjektin nimeltä TextInput1. Käyttäjä syöttää tähän ohjausobjektiin arvoja, jotka tallennetaan tietokantaan.

Käyttäjä kirjoittaa TextInput1-kohtaan Hello world.

Kaava Kuvaus Tulos
IsMatch( TextInput1.Text, "Hello world" ) Testaa, vastaako käyttäjän syöte tarkalleen merkkijonoa "Hello world". true
IsMatch( TextInput1.Text, "Good bye" ) Testaa, vastaako käyttäjän syöte tarkalleen merkkijonoa "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Testaa, sisältääkö käyttäjän syöte sanan ”hello” (kirjainkoko on merkityksellinen). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Testaa, sisältääkö käyttäjän syöte sanan ”hello” (kirjainkoko ei ole merkityksellinen). true

Esimääritetyt mallit

Kaava Kuvaus Tulos
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Vastaa Yhdysvaltojen sosiaaliturvatunnusta true
IsMatch( "joan@contoso.com", Email ) Vastaa sähköpostiosoitetta true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Vastaa, kun kyseessä on numerojono, jonka jälkeen on piste ja sitten nolla tai useampia numeroita. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Vastaa, kun kyseessä on numerojono, jonka jälkeen on piste ja sitten nolla tai useampia numeroita. Vastaavuustekstissä ei ole pistettä, joten tälle mallille ei löydy vastaavuutta. false

Säännönmukaiset lausekkeet

Kaava Kuvaus Tulos
IsMatch( "986", "\d+" ) Vastaa kokonaislukua, joka on suurempi kuin nolla. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Vastaa positiivista valuuttasummaa. Jos syöte sisältää desimaalierottimen, syötteen täytyy myös sisältää kaksi numeroa sen jälkeen. Esimerkiksi 3.00 on kelvollinen, mutta 3.1 ei. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Vastaa positiivista tai negatiivista valuuttasummaa. Jos syöte sisältää desimaalierottimen, syötteen täytyy myös sisältää kaksi numeroa sen jälkeen. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Vastaa Yhdysvaltojen sosiaaliturvatunnusta. Vahvistaa annetun syötekentän muodon, tyypin ja pituuden. Vastattavan merkkijonon täytyy sisältää kolme numeroa, joiden perässä on viiva, sitten kaksi numeroa, viiva ja neljä numeroa. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Sama kuin edellisessä esimerkissä, mutta yksi syötteen viiva on väärässä paikassa. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Vahvistaa vahvan salasanan, jonka täytyy sisältää kahdeksan, yhdeksän tai 10 merkkiä sekä vähintään yhden numeron ja yhden kirjaimen. Merkkijono ei saa sisältää erikoismerkkejä. false

Match- ja MatchAll-esimerkkejä

Kaava Kuvaus Tulos
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Poimii vain yhteyshenkilön tietojen sähköpostiosan. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Poimii vain yhteyshenkilön tietojen sähköpostiosan. Kelvollista osoitetta ei löydy (@-merkkejä ei ole), joten funktio palauttaa blank. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Poimii kielen, komentosarjan ja alueen kielitunnisteesta, jonka Language-funktio palauttaa. Tulokset vastaavat Yhdysvaltoja. Lisää esimerkkejä on Language-toiminnon dokumentaatiossa. Operaattori (?: ryhmittelee merkkejä luomatta toista alivastaavuutta. {
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)?" ) Poimii tunnit, minuutit ja sekunnit ISO 8601 -aikakestoarvosta. Puretut luvut ovat yhä tekstimerkkijonossa. Muunna se Value-funktiolla numeroksi ennen matemaattisten työvaiheiden suorittamista. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Syvennytään viimeiseen esimerkkiin. Jos haluat muuntaa tämän merkkijonon päivämäärä- ja aika-arvoksi käyttämällä Time-funktiota, sinun on välitettävä nimetyt alivastaavuudet yksitellen. Voit tehdä tämän käyttämällä With-toimintoa, joka toimii Match-funktion palauttamalle tietueelle:

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

Voit lisätä näihin esimerkkeihin Button-ohjausobjektin, määrittää sen OnSelect-ominaisuuden tähän kaavaan ja valita sitten painikkeen:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Kaava Kuvaus Tulos
Match( pangram, "THE", IgnoreCase ) Etsi kaikki "THE"-vastaavuudet pangram-muuttujan sisältämästä tekstimerkkijonosta. Merkkijonossa on kaksi vastaavuutta, mutta vain ensimmäinen palautetaan, koska käytät Match- etkä MatchAll-funktiota. SubMatches-sarake on tyhjä, koska alivastaavuuksia ei määritetty. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Etsi kaikki "the"-vastaavuudet pangram-muuttujan sisältämästä tekstimerkkijonosta. Testissä kirjainkoolla on merkitystä, joten vain toinen "the"-ilmentymä löytyy. SubMatches-sarake on tyhjä, koska alivastaavuuksia ei määritetty. MatchAll pangrammiin.
MatchAll( pangram, "the", IgnoreCase ) Etsi kaikki "the"-vastaavuudet pangram-muuttujan sisältämästä tekstimerkkijonosta. Tässä tapauksessa testissä ei oteta huomioon kirjainkokoa, joten sanan molemmat esiintymät löytyvät. SubMatches-sarake on tyhjä, koska alivastaavuuksia ei määritetty. MatchAll IgnoreCasen kanssa.
MatchAll( pangram, "\b\wo\w\b" ) Etsii kaikki kolmikirjaimiset sanat, joiden keskellä on "o". Huomaa, että "brown" jätetään pois, koska se ei ole kolmikirjaiminen sana, joten se ei vastaa kaavaa "\b" (sanan raja). MatchAll pangrammiin b-, wo-, w- ja b-vastineille.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Vastaa kaikkia merkkejä kohtien "fox" ja "dog" välillä. {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Voit tarkastella MatchAll-tuloksia galleriassa seuraavasti:

  1. Lisää tyhjässä näytössä tyhjä pystysuora Gallery-ohjausobjekti.

  2. Määritä gallerian Items-ominaisuudeksi MatchAll( pangram, "\w+" ) tai MatchAll( pangram, MultipleLetters ).

    Kohteiden valikoima.

  3. Valitse valikoiman malli valitsemalla gallerian keskeltä "Lisää kohde Lisää-välilehdeltä".

  4. Lisää valikoiman mallipohjaan Label-ohjausobjekti.

  5. Määritä selitteen Text-ominaisuudeksi ThisItem.FullMatch.

    Galleria täytetään esimerkkitekstin jokaisella sanalla. Muuta gallerian mallin ja Selite-ohjausobjektin kokoa, jotta näet kaikki sanat yhdessä näytössä.

    Text-ominaisuus.