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 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.
många tack! funkar utmärkt. :)
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 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...)
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 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 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...
Vide skrev:
Då 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 :)
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. :)
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 Hur menar du? Felhanteringen med formulär via ASP eller?
mm, formulärhantering med asp.
VideMedlem sedan dec. 19998 577 inlägg 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. ;)