Regex-regler for Episerver Forms

RegEx: Vanlige formater i Episerver Forms

Når du lager et fritekstfelt i skjemaet ditt i Episerver Forms, finnes det et konfigurasjonsvalg som heter "vanlig uttrykk" (på engelsk omtales dette gjerne som Regular Expression eller RegEx). Dette bruker du når du ønsker at brukeren skriver inn skjemafeltet i et bestemt format, f.eks et mobilnummer, fødselsnummer, bilskilt, kontonummer eller annet:

episerver_forms_regex_eksempel_mobilnummer2.jpg

Man bruker gjerne RegEx når formatet man trenger hverken er ren tekst eller et heltall, eller det finnes flere gyldige måter å skrive verdien i feltet på.

Tenk f.eks på et bilskilt - det er forskjell på om brukeren fyller inn "AB 12345" eller "AB1234", men begge deler kan være gyldige. 
Eller et kontonummer: "1234.56.78910", "12345678910" eller "1234 56 78910"? Slikt kan føre til kluss enten når du eksporterer skjemadata videre til Excel, eller når det sendes direkte videre som JSON/XML til andre systemer.

Fordelen med RegEx er altså at man med en fiffig formel kan validere både:

  • at brukeren fyller inn riktig antall tegn
  • at brukeren kun bruker gyldige tegn for det aktuelle formatet
  • at formatet brukeren skriver inn er riktig (med spesialtegn som mellomrom, punktum osv).

RegEx er veldig kraftfullt, men også ganske kryptisk. 

Regex-forklaring: Mobilnummer

En av formlene i listen under er norsk mobilnummer. RegEx-formelen for dette kan se slik ut: 
^((0047)?|(\+47)?)[4|9]\d{7}$

Kort forklart:

  • Inputen kan starte (^) med enten 0047 eller +47 (landskoden er ikke påkrevd)
  • Selve mobilnummeret må starte med enten 4 eller 9...
  • ...etterfulgt av 7 sifre (altså 8 totalt)
  • ...og det skal ikke være noe etter disse 8 sifrene ($)
  • Det skal ikke være noen mellomrom i mobilnummeret (altså lov med +4799887766 eller 99887766, men ikke +47 99887766 eller 998 87 766 eller 99 88 77 66).

Det finnes mange steder på nett å lære å skrive egne RegEx, se nederst i dette blogginnlegget!

Tips: Bruk plassholder-tekst til å hinte om formatet

Inputfelter i Episerver Forms har et konfigurasjonsvalg som heter "Plassholder" (placeholder). Dette er en tekst som vises i en gråtone i inputfeltet, men som forsvinner når brukeren begynner å taste der. Plassholder-teksten blir aldri sendt inn. 

Du kan bruke plassholderen til å hinte til brukeren om forventet format, slik:

episerver_forms_plassholder_eksempel_mobilnummer.jpg

RegEx-listen - norske formater

Jeg har hittil ikke funnet et sted hvor de mest vanlige norske Regex-formlene er samlet på ett sted. 
Så, her er denne listen. Samtlige er testet i Episerver Forms. Listen fylles på fortløpende:

Generelle formater

Noen tips:

  • Dersom du ikke med sikkerhet kan si at inputfeltet bare skal ha ett gyldig format, er det bedre å la dette være et rent tekstfelt (med en øvre og nedre grense for antall tegn, og du kan angi i RegEx'en om ulike spesialtegn skal være tillatt.)
  • Dersom du vil unngå å kreve store/små bokstaver i inputfeltet, kan du heller få utviklerne dine til å style feltet med CSS (text-transform: uppercase / lowercase). Stylingen av feltet påvirker formatet inputfeltet sendes inn i.
Beskrivelse RegEx-formel Eksempel på gyldig input
En bestemt lengde (1-10), alle tegn tillatt

^.{1,10}$

Sjokolade
Sjoko lade
Sj0k0l4d3!
"SJOKO"

En bestemt lengde (1-10), kun store/små bokstaver (ingen tegn/tall)

^[A-Z,a-z]{1,10}$

Sekretær
OSLO

En bestemt lengde (1-10), kun tall og bokstaver (ingen tegn)

^[A-Z,a-z,0-9]{1,10}$

Øya2020

Telefonnummer

Format-referanse

Beskrivelse RegEx-formel Eksempel på gyldig input
Mobil: Landskode valgfri, etterfulgt av 8 siffer som starter med 4 eller 9 ^((0047)?|(\+47)?)[4|9]\d{7}$ 004799887766
+4799887766
99887766
44556677
Mobil: Ingen landskode, ingen mellomrom, kun 8 siffer som starter med 4 eller 9 ^[4|9]\d{7}$ 99887766
44556677
Mobil: Ingen landskode, 8 siffer med mellomrom ^[4|9]\d{2} \d{2} \d{3}$ 998 87 766
445 56 677
Fasttelefon + mobil: Landskode valgfri, etterfulgt av 8 siffer (kan ikke starte med 0) ^((0047)?|(\+47)?)[1-9]\d{7}$ 004799887766
+4722334455
99887766
22334455

Bankkontonummer

Format-referanse

Beskrivelse RegEx-formel Eksempel på gyldig input
11 siffer (kan ikke starte med 0) med punktum som skilletegn ^[1-9]\d{3}\.\d{2}\.\d{5}$ 1111.22.33333
11 siffer (kan ikke starte med 0) med mellomrom som skilletegn ^[1-9]\d{3}\ \d{2}\ \d{5}$ 1111 22 33333
11 siffer (kan ikke starte med 0), ingen skilletegn ^[1-9]\d{10}$ 11112233333

Postnummer

Format-referanse

Beskrivelse RegEx-formel Eksempel på gyldig input
4 siffer mellom 0001-9998 (0000 og 9999 er ikke i bruk) ^(000[1-9]|0[1-9][0-9][0-9]|[1-9][0-9][0-9][0-8])$ 0181
3190
8340

Fødselsnummer

Format-referanse | Personnummer-generator til testing

Beskrivelse RegEx-formel Eksempel på gyldig input
11 siffer med datovalidering, ingen mellomrom

^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])\d{7}$

24011988020
31073416399
11 siffer med datovalidering, med mellomrom mellom fdato og pnr

^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])(\d{2})( )(\d{5})$

240119 88020
310734 16399

Registreringsnummer/bilskilt

Format-referanse

  • Merk at bilskilt er litt finurlig, siden det finnes så mange gyldige formater (f.eks personbil AB12345, buss/lastebil/MC AB1234, militærkjøretøy 12345, prøveskilt AB123, personlig MINBIL osv).
Beskrivelse RegEx-formel Eksempel på gyldig input
Personbil, uten mellomrom, ikke case-sensitiv

^[A-Z,a-z]{2}[1-9]{1}\d{4}$

AB12345
ab12345
Personbil, med mellomrom, case-sensitiv (kun store bokstaver)

^[A-Z]{2}[1-9]{1}\d{4}$

AB 12345
Buss/lastebil/MC, uten mellomrom

^[A-Z]{2}[1-9]{1}\d{3}$

AB1234
2-7 tegn, tillater bokstaver, tall, mellomrom og strek

^[0-9,a-z,A-Z, ,-]{2,7}$

A-12345
MIN BIL
12345ab
X1

Forslag, ønsker eller rettelser til listen?

Dersom du har formater du gjerne skulle sett på listen, ta gjerne kontakt med meg, så føyer jeg det til.

Det finnes flere steder online hvor man kan finne ferdiglagde RegEx-formler for ulike formater fra mange land, men disse bør testes godt før du tar dem i bruk.

Les mer om