10. november 2003 - 11:54Der er
33 kommentarer og 1 løsning
Checke felt for om tid, dato eller mail værdi er i rigtig format
Med følgende kan jeg checke om et input felt er tomt eller ej:
<script> function valider(){ if (document.SaveForm.Overskrift.value == '') { alert("Du mangler at angive en overskrift") return false; ; } } </script>
Jeg skal have lidt hjælp til at få lavet 3 script funktioner der undersøger det der er angivet i input feltet.
Den ene skal checke for tid og checke om tiden er i formatet 11:00 eller 1:00. Det er altså ligemeget om der står 01:00 eller 1:00 bare tidsformatet er rigtigt men lige meget hvad skal tiden ændres så den kommer til at være i formatet xx:xx. 1:00 bliver altså til 01:00.
Den anden skal checke om en dato værdi er rigtig, altså om det er i formatet dd-mm-åååå (10-11-2003). Her må formatet godt være en af følgende andre værdier men så skal den ændres til den angivende værdi der står efter pilen: 1-11-2003 -> 01-11-2003 11-1-2003 -> 11-01-2003 11-11-03 -> 11-11-2003
Den sidste skal checke om værdien fra et mail felt er rigtigt altså i formatet navn@domæen.endelse
Der gives point efter følgende: Tid - 20 Dato - 40 Mail - 60
tid = tC(datotid.getHours()) + ":" + tC(datotid.getMinutes());
function tC(tal){ return (tal>9)?""+tal:"0"+tal; }
var regexp = /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i; if(!document.SaveForm.email.value.match(regexp)){ alert('Udfyld email med en gyldig email-adresse') document.SaveForm.email.select(); document.SaveForm.email.focus(); return false;
Nu har jeg lige smidt email funktionen ind men jeg får ikke det ønsket resultat. Ligemeget hvordan min mail ser ud så sendes jeg altid videre uden at få en fejl. Udskrevet ser min mail validering således ud:
<script> function valider(){ var regexp = /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i; if(!document.SaveForm.Email.value.match(regexp)){ alert("Email adressen er ikke gyldig") document.SaveForm.email.select(); document.SaveForm.email.focus(); return false; } </script>
if(!document.SaveForm.Mail.value.match(regexp)){ alert("Email adressen er ikke gyldig") document.SaveForm.Mail.select(); document.SaveForm.Mail.focus();
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Check dato, tid og mail</title> <meta name="keywords" content="roenving;http://www.eksperten.dk/spm/425502"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language="javascript" type="text/javascript"> function valider(f){ reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;
Overstående køre fint hvis jeg køre det fra sin egen side men hvis jeg smider det ind i min side melder den intet selvom jeg ikke har rigtige værdier eller angivet noget:
tid = tC(datotid.getHours()) + ":" + tC(datotid.getMinutes());
function tC(tal){ return (tal>9)?""+tal:"0"+tal; }
Den går jo udfra at jeg altid har en startdato og en tid. Det kan jeg ikke gå udfra. I overstående eksempel har jeg kun en startdato og en slutdato. Ingen tid. Der skal jeg så kun checke min datoer. I andre tilfælde skal jeg kun checke tider og kun nogle gange skal jeg checke tider og datoer sammen. Derfor skal der som udgangspunkt ikke være nogen sammenhæng mellem checkne. Jeg skal kunne checke en tid eller dato uafhængig af andre input felter!
Overstående virker som det skal. Nu er det så bare at jeg skal have lavet så jeg kan checke på et tids- og datofelt. Der er det at jeg ikke helt forstår hvad det er du vil med det du sendte. For såvidt jeg kan se der så checker du datoen og tiden samlet og ikke hver for sig. Jeg skal have 2 seperate funktioner som jeg kan kalde:
Function Check_Dato(InputNavn, Besked) Function Check_Tid(InputNavn, Besked)
Så accepters datoer af typen x-x-xxxx hvor x = {0-9}
Den skal ikke kunne accepter datoer der ikke er af typen xy-zy-2yyy hvor x = {0-2}, y = {0-9}, z = {0-1} og xy < 32, xy < 13, 2000 < 2yyy > 3000. Eller fortalt på lidt mere forståelige dansk så skal den kun kunne accepter gyldige datoer fra år 2000 til år 3000 i formatet dd-mm-åååå. Er der nogen der kan hjælpe?
roenving ... jeg forstår ikke helt det kode du skrev overnfor. Den skulle kunne klare hele checket på dato feltet eller hvad? Jeg kan ikke få den til at virke når jeg smider den ind i min Function Check_Dato(InputNavn, Besked).
Den jeg smed sidste accepterer (som du angav i starten !-) enkelt-cifre i dag og måned, men konverterer det til tocifrede ...
-- men det bliver altså ikke nemmere af, at du farer frem og tilbage mellem VBscript og javascript, ville det ikke være nemmere bare at smide javascriptet ind ?-)
reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/; if(!f.StartDato.value.match(reg)){ alert("Datoen er ikke gyldig. Den skal være i formatet 24-12-2003"); f.StartDato.select(); f.StartDato.focus(); return false; ; } t[0] = document.SaveForm.StartDato.value.split("-"); datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10)); if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()){ alert('Forkert datoformat\n01-12-2003'); document.SaveForm.StartDato.select(); document.SaveForm.StartDato.focus(); return false; } dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear(); document.SaveForm.StartDato.value = dato; return true; } Function tC(tal){ return (tal>9)?"+tal:"0"+tal; }
Og den virker ikke. Ligemeget hvad jeg angiver i mit felt så submitter den altid min funktion uden at melde problemer. Det gør den også ved alle mine andre felter. Ændre jeg funktionen til det i min besked fra 13:30:11 så virker alle input felt checke pånær min dato hvor den sender 1-1-1111 videre til næste side.
Fandt fejlen ... ... der var en } for meget. Nu melder den ingen fejl og checker som den skal. Men det accepter datoer i formen 1-1-1111 og her siger du så at den ændre dem til 01-01-1111 men det gøre den ikke. Desuden så accepter den også årstal der er under 2000 hvilket den ikke skal.
Det gør ikke så meget med at den ikke selv ændre formatet da jeg bare siger at 1 og anden værdi skal være 2 cifre. Men hvordan får jeg så årstallet skal være mellem 2000 og 3000?
Nåh ja ... jeg ser også lige en anden central ting ... første cifer skal ligge mellem 1 og 31 og anden mellem 1 og 12. Ellers kam man angive 99-99-2002!
-- og denne linje tester for forkerte datoer, da der så vil være uoverenstemmelse mellem den dato som finde i Date()-objektet og det som står i feltet !-)
Det vil være nemmest tror jeg hvis jeg kan sige mellem hvilke værdier hver af de 3 tal må være. Det kommer vi også til at bruge ved tids delen hvor jeg har denne funktion:
Det var tidstingen, tilsvarende kan dato-tingen skrives, men den kan ikke teste alle de andre ting (at månedslængder er forskellige og det specielle problem med skudår !-), det klares i en hådevending ved at smide den igennem et Date-objekt ...
<script> //STEP 10: prepare submit FORM function function SubmitForm() { //STEP 11: Before getting the edited content, the display mode of the editor //must not in HTML view. if(obj1.displayMode == "HTML") { alert("Fravælg HTML") return ; } <% Response.write Check_Inputfelt("Emne", "Du mangler at angive et emne") Response.write Check_Dato("SlutDato", "Datoen er ikke gyldig. Den skal være i formatet 24-01-2004") %>
//STEP 12: Here we move the edited content into the input form we've prepared before. Form1.txtContent.value = obj1.getContentBody()
//STEP 13: Form submit. Form1.submit() } function LoadContent() { //STEP 6: Use putContent() method to put the hidden Textarea value into the editor. obj1.putContent(idTextarea.value) } </script>
Det hele udskrives som følgende:
<SCRIPT>//STEP 10: prepare submit FORM function function SubmitForm() { //STEP 11: Before getting the edited content, the display mode of the editor //must not in HTML view. if(obj1.displayMode == "HTML") { alert("Fravælg HTML") return ; } if (document.SaveForm.Emne.value == '') { alert("Du mangler at angive et emne") return false; ; } reg = /^(([0-2][0-9])|(3[01]))\-((0[0-9])|(1[0-2]))\-2\d{3}$/ if(!document.SaveForm.SlutDato.value.match(reg)){ alert("Datoen er ikke gyldig. Den skal være i formatet 24-01-2004"); document.SaveForm.SlutDato.select(); document.SaveForm.SlutDato.focus(); return false; } t[0] = document.SaveForm.SlutDato.value.split("-"); datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10)); if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()){ alert('Forkert datoformat\n01-12-2003'); document.SaveForm.SlutDato.select(); document.SaveForm.SlutDato.focus(); return false; } dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear(); document.SaveForm.SlutDato.value = dato; return true; function tC(tal){ return (tal>9)?""+tal:"0"+tal; }
//STEP 12: Here we move the edited content into the input form we've prepared before. Form1.txtContent.value = obj1.getContentBody()
//STEP 13: Form submit. Form1.submit() } function LoadContent() { //STEP 6: Use putContent() method to put the hidden Textarea value into the editor. obj1.putContent(idTextarea.value) } </SCRIPT>
Og fejlen meldes i dette: if(!document.SaveForm.SlutDato.value.match(reg)){ alert("Datoen er ikke gyldig. Den skal være i formatet 24-01-2004"); document.SaveForm.SlutDato.select(); document.SaveForm.SlutDato.focus(); return false; }
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.