18. august 2009 - 16:51Der er
14 kommentarer og 1 løsning
Validering af et klokkeslæt-felt
Hejsa. Jeg har et klokkeslæt felt, hvor jeg lige nu har noget PHP-validering på, men som ikke virker 100%.
Kravet er, at der skal indtastes i dette format: tt:mm, fx. "09:15" Men det skal også være OK, at indtaste "9:15". Og endelig, hvis der fx. alene skrives 9 og feltet forlades, vil det være rigtigt smart, hvis felt-indholdet automatisk rettes til "09:00". Nogen der har link eller opskrift på denne udfordring.
umiddelbart ville jeg bruge et af de utallige frameworks der er tilgængelige. her er den slags validering nærmest klaret på forhånd. når først du har lært et javascript framework kigger du aldrig tilbage :)
Det er et godt forslag du kommer med, og som jeg vil sætte mig mere ind i, når tiden er lidt bedre. Lige nu søger jeg en specifik løsning, og håber på nogle mere konkrete bidrag.
hvis du bruger regular expressions til at validere med, så kan du bruge dette som både tillader 01:01:01 og 1:1:1: ^((\d)|(0\d)|(1\d)|(2[0-3]))\:((\d)|([0-5]\d))\:((\d)|([0-5]\d))$
Linket forklarer vel kun, hvordan der kontrolleres for korrekt indhold i feltet. Og det er fint - det blev jeg klogere af. Men..... Hvis jeg fx. blot skriver "9" og hopper ud af feltet, så skal feltindholdet ændrer sig til "09:00".
ok, så er regular expressions udelukket. du skal trække tallene ud for hver : i input-feltet så og lave tjek på det, og derefter sætte 0 ind alt efter om de er over eller under 9. jeg fandt noget på codeproject der forklarede hvordan man adskiller det så du kan ændre koden til at tilføje 0 - prøv at søge efter javascript time validation på google.
Her er løsningen på alle dine problemer skrevet af summer himself: ------------------ <html> <head>
<script language="JavaScript">
function timeValidator(timeStr) { var formattedTime = new String(); var timeSep = timeStr.split(':', 3); var hour = timeSep[0]; var minute = timeSep[1]; var second = timeSep[2];
function timeValidator(timeStr) { var formattedTime = new String(); var timeSep = timeStr; //Erstat alle punktummer med kolon. timeSep = timeSep.replace(/\./g, ':'); //Split timer og minutter fra hinanden timeSep = timeSep.split(':', 2);
var hour = timeSep[0]; var minute = timeSep[1];
var isValid = true;
//Hvis ikke der er angivet minutter, så går vi ud fra det skal være 00. if(minute == null || minute == '') minute = '00';
//isNaN = is Not a Number. Funktionen returnerer altså true hvis det ikke er et tal //(og det er jo det eneste vi vil arbejde med her, så hvis der bliver returneret true, //sættes isValid til false.) if(isNaN(hour) || isNaN(minute)) isValid = false;
//Vi tjekker om tallene stemmer overens med et tidsformat vi kender. if(hour > 23 || hour == null || hour < 0) isValid = false;
if(!isValid) { alert('Tiden er ikke angivet i korrekt format! (00:00)'); } else { //Hvis der er angivet et tal under 10 sikrer vi os, at der kommer et nul foran if(hour < 10 && hour.length == 1) formattedTime = '0'; formattedTime += hour + ':';
Må jeg stille et spørgsmål mere til koden i #12. Hvordan kan jeg bruge denne funktion på flere input-felter. Jeg kan kun få koden til at virke, hvis jeg kalder input feltet for "name=time".
Synes godt om
Ny brugerNybegynder
Din løsning...
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.