webForumDet fria alternativet

regexp +formulärkontroll

ASPur ASP

14 svar · 351 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

tänkte testa att använda regexp för att validera formulär men har inte
pysslat så värst mycket med detta tidigare så jag behöver lite starthjälp.
tänkte börja med en datumkontroll, kan man bygga "regexpen" så
att måste skriva nnnn-nn-nn (n=nummer, åååå-mm-dd) i formulärfältet annars larmar den?

hajjar ni eller förklarar jag som en kråka?!! :)

VideMedlem sedan dec. 19998 577 inlägg
#2

Visst kan du det, mönstret borde se ut såhär:

.pattern = "\d{4}-\d{2}-\d{2}"

Hittar du inte mönstret så är det helt enkelt fel på formatet som är inmatat.

doggelitoMedlem sedan juni 20003 076 inlägg
#3

många tack! funkar utmärkt. :)

doggelitoMedlem sedan juni 20003 076 inlägg
#4

har nu kommit så här långt:

Function RegExpTest(exptype, strng)
	Dim regEx, retVal
	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Global = True
		Select Case exptype
			Case "regEx_date"
				regEx.Pattern = "\d{4}-\d{2}-\d{2}"
			Case "regEx_email"
				regEx.Pattern = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
		End Select
		
retVal = regEx.test(strng) 
If retVal Then
    RegExpTest = true
  Else
    RegExpTest = false
  End If

End Function

if RegExpTest("regEx_date", "2003-12-05") and RegExpTest("regEx_email", "info@test.se") then 
'insert i databas eller dyligt.
end if

frågor:
- är detta ett smart sätt att hantera validering på eller?
- om det är bra, kan man då bygga på en errorkod som skriver ut vilket av fälten som är fel ifyllt?

Engine^Medlem sedan dec. 20003 887 inlägg
#5

Om det är bäst vet jag inte ;)

Felhanteringen kan du sätta i dina Case-satser...

		Select Case exptype
			Case "regEx_date"
				regEx.Pattern = "\d{4}-\d{2}-\d{2}"
' Här lägger du bara in ett meddelande som t.ex. "Du skrev felaktigt datum"

Felhantering är iofs ett stort område om man vill vara konsekvent i koden. (luddig svenska...)

doggelitoMedlem sedan juni 20003 076 inlägg
#6

hmm, en oskriven lag säger att man inte ska ha response.write i funktioner.
man skulle ju kunna ha så här (ungefär):

if not RegExpTest("regEx_date", "2003-12-05") then errcode = errcode & 1
if not RegExpTest("regEx_email", "info@test.se") then errcode = errcode & 2

if len(errcode) = 0 then
'insert i databas eller dyligt.
else
    if instr(errcode, 1) then response.write "Obs! Fel datum."
end if

men det är som ni ser inte speciellt smidigt, inte om man har många formulärfält i alla fall.
Feltexterna lägger man så klart i egen function men alla if-taggar kvarstår dock.
kan man få det smidigare?

VideMedlem sedan dec. 19998 577 inlägg
#7

Då skulle jag lägga felkoderna i en array eller dictionary som du sedan kan loopa igenom, samt ha ytterligare information i.

Engine^Medlem sedan dec. 20003 887 inlägg
#8

Istället för Response.Write, så går det väl att anropa en popup/alert/msgbox, som säger Fel: ditten, Funktion: datten

Felkoder kan vara bra att ha lagrat i databasen... men, som sagt, felhantering är stort och ofta svårt att få perfekt...

doggelitoMedlem sedan juni 20003 076 inlägg
#9

Vide skrev:

skulle jag lägga felkoderna i en array eller dictionary...

He, då blir man ju nyfiken på hur DU gör med felkoder eftersom du tydligen inte gör nått liknande detta. §jr

VideMedlem sedan dec. 19998 577 inlägg
#10

:)

Jag skulle lägga alla felkoder (nummerkoderna) i en funktion, i funktionen har jag en select case som binder koderna till en feltext. Så jag anropar funktionen med ett nummer och får en feltext tillbaks.

När du kör din kontroll så samlar du upp alla felkoder i en array, när det sedan är dags att skriva ut felkoderna loopar du bara igenom arrayen och hämtar samtidigt felmeddelandena och formaterar HTML-koden precis som du vill ha det.

Simpelt att hantera. :)

doggelitoMedlem sedan juni 20003 076 inlägg
#11

tack för infon, ska genast börja testa detta. :)

när jag ändå är i frågatagen, hur sköter du din felhantering? nått liknande?

VideMedlem sedan dec. 19998 577 inlägg
#12

Hur menar du? Felhanteringen med formulär via ASP eller?

doggelitoMedlem sedan juni 20003 076 inlägg
#13

mm, formulärhantering med asp.

VideMedlem sedan dec. 19998 577 inlägg
#14

Oftast när jag bygger t.ex webbundersökningar så automatgenerar jag alla formulärsfält, alltså har jag alla definitioner av elementen i någon slags dataform. Lägger man bara in mödan att lägga till regexp-syntax och felmeddelande i själv definitionen av de element som skall automatgenereras så har du det ganska smidigt framför dig.

Det är ganska svårt att beskriva lite mer komplex felhantering i ett inlägg, möjligtvis blir det mål för en artikel i framtiden. ;)

doggelitoMedlem sedan juni 20003 076 inlägg
#15

Vide skrev:

...möjligtvis blir det mål för en artikel i framtiden

ser fram emot den! :bire

136 ms totalt · 3 externa anrop · v20260731065814-full.363dfaf6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)