Guffa | Foto | Programmering

RegExp del 2 - enkel validering

Med metoden .Test() i RegExp-objektet kan man söka efter ett mönster i en sträng. Ungefär som InStr-funktionen, men mycket kraftfullare.

Detta kan man utnyttja för att kolla ifall en sträng innehåller text som stämmer med ett mönster, i mönstret kan man nämligen ange början och slut av texten. Ifall man gör ett mönster som betyder "början av texten + en eller flera siffror + slutet av texten", så kan man använda det för att kolla att strängen enbart innehåller siffror. Objektet kollar fortfarande ifall mönstret finns någonstans i strängen, men eftersom man angett både början och slut på texten, så måste mönstret täcka hela strängen för att objektet ska hitta mönstret.

Början av texten representeras av ^, och slutet av texten representeras av $.

För att matcha en siffra kan man antingen göra en teckenuppsättning med alla siffror: [0-9], eller använda den speciella koden "d. Ifall vi sätter ett plus efter så betyder det en eller flera siffror: [0-9]+ eller "d+.

En funktion för att kolla ifall en sträng innehåller enbart siffror, skulle alltså se ut så här:

Function IsDigits(strValue)
   With New RegExp
      .Pattern = "^"d+$"
      IsDigits = .Test(strValue)
   End With
End Function

Metoden Test returnerar True om den kunde hitta mönstret, eller False om den inte kunde hitta det. Man anropar funktionen IsDigits() med strängen som parameter, och funktionen returnerar alltså True eller False. Man kan till exempel använda den så här:

If not IsDigits(Request.Form(" id")) Then
   Response.Write "Fel: id innehåller ogiltiga tecken."
   Response.End
End If

Med lite mer komplicerade mönster så kan man validera nästan vad som helst. Det handlar bara om att bestämma vad man ska kolla efter, och sedan räkna ut hur mönstret ska se ut för det.

Vi kan till exempel göra en enkel koll på att en epost-adress någon skrivit in är rimlig. Ifall vi definierar en epost-adress som "tecken + @ + tecken + . + a-z", så kan vi bygga ett mönster av det.

Vi släpper igenom alla tecken utom mellanslag här, men det går ju att göra en snävare filtrering om man vill. För att göra en "negativ" teckenuppsättning, alltså något som matchar allting utom vissa tecken, använder man ^ i en teckenuppsättning. (Tecknet ^ betyder alltså olika saker beroende på om det står i en teckenuppsättning eller inte.) Vilket tecken som helst utom mellanslag representeras av: [^ ]

Punkten är ett specialtecken i mönster, så vi får skriva den som ". för att objektet ska förstå att det är en vanlig punkt vi är ute efter.

Observera att [^ ] även matchar punkter, så man kan alltså ha flera punkter i adressen. Vi lägger specifikt med en punkt för att det måste finnas minst en punkt i adressen.

Toppdomänen som är sist i epost-adressen kan bara bestå av bokstäver. Här godkänner vi både versaler och gemener, genom att göra en teckenuppsättning som matchar A-Z och a-z: [A-Za-z]

Ifall vi sätter ihop det till ett mönster, och stoppar in det i en funktion som fungerar på samma sätt som IsDigits(), blir det så:

Function IsEmail(strValue)
   With New RegExp
      .Pattern="^[^ ]+@[^ ]+".[A-Za-z]+$"
      IsEmail=.Test(strValue)
   End With
End Function

Här är en länk till MSDN som beskriver (på engelska) alla koderna man kan använda för att göra mönster:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsgrpregexpsyntax.asp

Göran Andersson