12. december 2004 - 00:37Der er
8 kommentarer og 1 løsning
Korrekt dato / dato validering - ASP/MySQL
Jeg har et html-form-inputfelt med plads til 10 char. I dette felt skriver man en dato, men da brugeren kan anvende disse 10 char yderst kreativt kan de finde på at angive datoen på mange forskellige formater "2004-12-11", "11-12-2004", "20041211" osv osv.
Yderligere skal datoen gemmes/hentes i et MySQL felt af typen Date, dvs MySQL vil have værdien "2004-12-11" for a kunne omdanne til en SQL date.
Er der en sikker måde at teste og omforme brugerens input, så datoen altid læses korrekt (uanset input format) ?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Regulære udtryk er godt. Men der er et problem mellem dansk og udansk skrivemåde. Betyder "11-12-2004" nu 11. december eller 12. november? Hvis du kan bestemme dig for det, kan det nok grejes ;)
Du kan jo lege lidt med dette eksempel. Det kunne nok laves en anelse smarter, men regulære udtryk i stenalder-ASP er ret kluntede, desværre.
<%
function two(s) if len(s)=1 then two="0" & s else two=s end if end function
function datotjek(dato) dim regex,matches,match set regex = new regexp regex.pattern = "^ *([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) *$" regex.global = false regex.ignorecase = false
set matches = regex.execute(dato)
if matches.count>0 then set match=matches(0) datotjek=match.submatches(0) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(2)) set matches=nothing exit function end if set matches=nothing
if matches.count>0 then set match=matches(0) datotjek=match.submatches(0) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(2)) set matches=nothing exit function end if set matches=nothing
if matches.count>0 then set match=matches(0) datotjek=match.submatches(2) & "-" & two(match.submatches(1)) & "-" & two(match.submatches(0)) set matches=nothing exit function end if set matches=nothing
Ups, den sidste skal ikke være regex.pattern = "^ *([0-9]{1,2})-?([0-9]{1,2})-([0-9]{4}) *$" men regex.pattern = "^ *([0-9]{1,2})-([0-9]{1,2})-([0-9]{4}) *$"
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.