Avatar billede tblaster Nybegynder
10. november 2003 - 11:54 Der 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
Avatar billede roenving Novice
10. november 2003 - 12:16 #1
Er dato og tid i samme felt ?-)

For hvis det er, er det nemmeste at lave et Date-objekt og så tage værdierne derfra:

Eks. tid = "1-8-2003 10:05"

reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;

if(!tid.match(reg)){
  alert('Forkert tidsformat\n01-12-2003 15:13');
  return false;
}

var t = tid.split(" ");
t[0] = t[0].split("-");
t[1] = t[1].split(":");

datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10), parseInt(t[1][0], 10), parseInt(t[1][1], 10));

dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear();

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;
Avatar billede roenving Novice
10. november 2003 - 12:16 #2
-- og der manglede en linje nederst:

}
Avatar billede tblaster Nybegynder
10. november 2003 - 12:18 #3
Nope ... dato og tid er ikke i samme felt. De angives i 2 forskellige felter! Jeg har altså følgende værdier:

document.SaveForm.Dato.value
document.SaveForm.Tid.value
document.SaveForm.Mail.value
Avatar billede roenving Novice
10. november 2003 - 12:21 #4
-- og så glemte jeg selvfølgelig at angive fidusen med Date-objektet, nemlig at have en enkel absolut validering:

Lige efter oprettelsen af datotid som Date():

if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonths()+1)||t[0][2]!=datotid.getFullYear()||t[1][0]!=datotid.getHours()||t[1][1]!=datotid.getMinutes()){
alert('Fejl i dato');
return false;
}
Avatar billede tblaster Nybegynder
10. november 2003 - 12:25 #5
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>
Avatar billede roenving Novice
10. november 2003 - 12:26 #6
Hedder feltet Email ?-)

if(!document.SaveForm.Mail.value.match(regexp)){
alert("Email adressen er ikke gyldig")
document.SaveForm.Mail.select();
document.SaveForm.Mail.focus();
Avatar billede tblaster Nybegynder
10. november 2003 - 12:29 #7
Yep ... feltet hedder Email.
Avatar billede tblaster Nybegynder
10. november 2003 - 12:32 #8
Jeg skal bruge det hele i funktioner så jeg har lavet følgende email funktion:

Function Check_Email(InputNavn, Besked)
    dim str
    str = "var regexp = /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i;" & VbCrLf
    str = str & "if(!document.SaveForm." & InputNavn & ".value.match(regexp)){" & VbCrLf
    str = str & "alert(""" & Besked & """)" & VbCrLf
    str = str & "document.SaveForm." & InputNavn & ".select();" & VbCrLf
    str = str & "document.SaveForm." & InputNavn & ".focus();" & VbCrLf
    str = str & "return false;" & VbCrLf
    Check_Email = str
End function

På siden hvor jeg så skal have checket min mail bruger jeg så følgende:

Response.write "<script> " & VbCrLf       
Response.write "function valider(){" & VbCrLf

...
Response.write Check_Email("Email", "Email adressen er ikke gyldig")
...

Response.write "}" & VbCrLf
Response.write "</script>" & VbCrLf
Avatar billede roenving Novice
10. november 2003 - 12:37 #9
<!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}$/;

if(!f.Dato.value.match(reg)){
  alert('Forkert datoformat\n01-12-2003');
  f.Dato.select();
  f.Dato.focus();
  return false;
}

reg = /^\d{1,2}\:\d{1,2}$/;

if(!f.Tid.value.match(reg)){
  alert('Forkert tidsformat\n15:13');
  f.Tid.select();
  f.Tid.focus();
  return false;
}

var t = [f.Dato.value, f.Tid.value];
t[0] = t[0].split("-");
t[1] = t[1].split(":");

datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10), parseInt(t[1][0], 10), parseInt(t[1][1], 10));

if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()||t[1][0]!=datotid.getHours()||t[1][1]!=datotid.getMinutes()){
    alert('Forkert datoformat\n01-12-2003');
  f.Dato.select();
  f.Dato.focus();
    return false;
}

dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear();

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(!f.Mail.value.match(regexp)){
  alert('Udfyld email med en gyldig email-adresse')
  f.Mail.select();
  f.Mail.focus();
  return false;
}
alert('Alt iorden !-)')
return true;
}
</script>
</head>
<body>
<br>
<form name="SaveForm" onsubmit="valider(this);return false">
Dato: <input name="Dato" type="text" value="dd-mm-åååå" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"><br>
Tid: <input name="Tid" type="text" value="tt:mm" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="10"><br>
e-mail: <input name="Mail" type="text" value="navn@domæne.topdomæne" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="40"><br>
<input type="submit">
</form>
</body>
</html>
Avatar billede tblaster Nybegynder
10. november 2003 - 12:48 #10
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:

<form method="post" onsubmit="valider(this);return false" action="Main.asp?ModulID=8&Bruger=True&ID=55&Mode=Opret&Opret/ret=OK&Design=1&KundeID= 3&BrugerID=NY" name="SaveForm" ID="Form1">
                       
                       
                        <script language="javascript" type="text/javascript">
function valider(f){
reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;

if(!f.StartDato.value.match(reg)){
  alert('Forkert datoformat\n01-12-2003');
  f.Dato.select();
  f.Dato.focus();
  return false;
}

reg = /^\d{1,2}\:\d{1,2}$/;

if(!f.Tid.value.match(reg)){
  alert('Forkert tidsformat\n15:13');
  f.Tid.select();
  f.Tid.focus();
  return false;
}

var t = [f.StartDato.value, f.Tid.value];
t[0] = t[0].split("-");
t[1] = t[1].split(":");

datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10), parseInt(t[1][0], 10), parseInt(t[1][1], 10));

if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()||t[1][0]!=datotid.getHours()||t[1][1]!=datotid.getMinutes()){
    alert('Forkert datoformat\n01-12-2003');
  f.Dato.select();
  f.Dato.focus();
    return false;
}

dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear();

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(!f.Email.value.match(regexp)){
  alert('Udfyld email med en gyldig email-adresse')
  f.Mail.select();
  f.Mail.focus();
  return false;
}
alert('Alt iorden !-)')
return true;
}
</script>
Avatar billede tblaster Nybegynder
10. november 2003 - 12:49 #11
ups ... glemte lige mine input felter og min submit:

                        <br><table cellSpacing='0' cellPadding='0' border='0'><tr><td>Navn</td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='Navn'></td></tr><tr><td>Brugernavn </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='Brugernavn'></td></tr><tr><td>Email </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='Email'></td></tr><tr><td>Spørgsmål </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='Spørgsmål'></td></tr><tr><td>Svar </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='Svar'></td></tr><tr><td>Start Dato </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='10-11-2003' name='StartDato'>&nbsp;<a href="java script:open_editwin('Kalender.asp?Antal=1&Fremtid=True&Fortid=False&Form=SaveForm&Input=StartDato','Kalender',170,160,100,350,'no')">Kalender</a></td></tr><tr><td>Slut Dato </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input size='60%' value='' name='SlutDato'>&nbsp;<a href="java script:open_editwin('Kalender.asp?Antal=1&Fremtid=True&Fortid=False&Form=SaveForm&Input=SlutDato','Kalender',170,160,100,350,'no')">Kalender</a></td></tr><tr><td>Gruppe </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><select size='1' name='Grupper'><option value='5'>Bruger</option><option value='20'>Firma Admin</option><option value='21'>Administrator</option></select></td></tr><tr><td>Admin </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input type=checkbox  name='Admin' value='Admin'></td></tr><tr><td>Aktiv </td><td>&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;</td><td><input type=checkbox  name='Aktiv' value='Aktiv'></td></tr></tr><tr><td>&nbsp;</td></tr><tr><td width='105'>&nbsp;</td><td width='27'>&nbsp;</td><td><input name="submit" type="submit" class="Button" value="Gem" />
Avatar billede tblaster Nybegynder
10. november 2003 - 12:52 #12
Desuden så er jeg ikke helt sikker på hvad du vil med denne stump kode:

var t = [f.StartDato.value, f.Tid.value];
t[0] = t[0].split("-");
t[1] = t[1].split(":");

datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10), parseInt(t[1][0], 10), parseInt(t[1][1], 10));

if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()||t[1][0]!=datotid.getHours()||t[1][1]!=datotid.getMinutes()){
    alert('Forkert datoformat\n01-12-2003');
  f.Dato.select();
  f.Dato.focus();
    return false;
}

dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear();

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!
Avatar billede tblaster Nybegynder
10. november 2003 - 12:55 #13
Jeg har lige checke koden lidt mere og kan se at hvis jeg har en forkert værdi i mine felter så får jeg popup men den submitter alligevel formen.
Avatar billede tblaster Nybegynder
10. november 2003 - 13:18 #14
Nu har jeg delt det lidt op for at tage en ting ad gangen. Jeg har fået mail funktionen til at virke. Som det er lige nu har jeg dette:

Function Check_Inputfelt(InputNavn, Besked)
    dim str
    str = "if (document.SaveForm." & InputNavn & ".value == '')" & VbCrLf
    str = str & "{" & VbCrLf
    str = str & "alert(""" & Besked & """)" & VbCrLf
    str = str & "return false; ;" & VbCrLf
    str = str & "}" & VbCrLf
    Check_Inputfelt = str
End function

Function Check_Email(InputNavn, Besked)
    dim str
    str = "var regexp = /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i;" & VbCrLf
    str = str & "if(!f." & InputNavn & ".value.match(regexp)){" & VbCrLf
    str = str & "alert(""" & Besked & """)" & VbCrLf
    str = str & "f." & InputNavn & ".select();" & VbCrLf
    str = str & "f." & InputNavn & ".focus();" & VbCrLf
    str = str & "return false; ;" & VbCrLf
    str = str & "}" & VbCrLf
    Check_Email = str
End function

Response.write " <script language=""javascript"" type=""text/javascript"">" & VbCrLf
Response.write "function valider(f){" & VbCrLf

Response.write Check_Inputfelt("Email", "Du mangler at angive en email")
Response.write Check_Email("Email", "Email adressen er ikke gyldig")

Response.write "}" & VbCrLf
Response.write "</script>" & VbCrLf

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)
Avatar billede roenving Novice
10. november 2003 - 13:28 #15
Min udgave var jo til at lige teste, så der er en del småting, som skal tilpasses til dit konkrete behov, først skal form-tagget ændres til:

<form method="post" onsubmit="return valider(this);" action="Main.asp?ModulID=8&Bruger=True&ID=55&Mode=Opret&Opret/ret=OK&Design=1&KundeID= 3&BrugerID=NY" name="SaveForm" ID="Form1">

-- så den reagerer udfra valideringen.

-- og ja, jeg har lavet det som een funktion, så det kunne være:

function checkDato(fld){
t[0] = fld.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');
  fld.select();
  fld.focus();
    return false;
}

dato = tC(datotid.getDate()) + "-" + tC(datotid.getMonth()+1) + "-" + datotid.getFullYear();

fld.value = dato;
return true;
}

function tC(tal){
  return (tal>9)?""+tal:"0"+tal;
}

-- og så hedder kaldet til checkDato f.eks.

if(checkDato(document.SaveForm.StartDato)){
//Alt iorden, fortsæt
}else return false;//Fejl gå tilbage til udfyldelse
Avatar billede tblaster Nybegynder
10. november 2003 - 13:30 #16
Hvis jeg benytter følgende:

Function Check_Dato(InputNavn, Besked)
    dim str
    str = "    reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;" & VbCrLf
    str = str & "if(!f." & InputNavn & ".value.match(reg)){" & VbCrLf
    str = str & "  alert(""" & Besked & """);" & VbCrLf
    str = str & "  f." & InputNavn & ".select();" & VbCrLf
    str = str & "  f." & InputNavn & ".focus();" & VbCrLf
    str = str & "  return false; ;" & VbCrLf
    str = str & "}" & VbCrLf
    Check_Dato = str
End function

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?
Avatar billede tblaster Nybegynder
10. november 2003 - 13:38 #17
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).
Avatar billede roenving Novice
10. november 2003 - 13:44 #18
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 ?-)
Avatar billede tblaster Nybegynder
10. november 2003 - 14:04 #19
Jeg vil have det i en vb funktion som jeg så kan kalde! Hvis jeg prøver det du siger og laver følgende:

Function Check_Dato(InputNavn, Besked)
    dim str
    str = "    reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;" & VbCrLf
    str = str & "if(!f." & InputNavn & ".value.match(reg)){" & VbCrLf
    str = str & "  alert(""" & Besked & """);" & VbCrLf
    str = str & "  f." & InputNavn & ".select();" & VbCrLf
    str = str & "  f." & InputNavn & ".focus();" & VbCrLf
    str = str & "  return false; ;" & VbCrLf
    str = str & "}" & VbCrLf
   
    str = str & "t[0] = document.SaveForm." & InputNavn & ".value.split(""-"");" & VbCrLf
   
    str = str & "datotid = new Date(+t[0][2], parseInt(t[0][1], 10)-1, parseInt(t[0][0], 10));" & VbCrLf
   
    str = str & "if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()){" & VbCrLf
    str = str & "    alert('Forkert datoformat\n01-12-2003');" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".select();" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".focus();" & VbCrLf
    str = str & "    return false;" & VbCrLf
    str = str & "}" & VbCrLf
   
    str = str & "dato = tC(datotid.getDate()) + ""-"" + tC(datotid.getMonth()+1) + ""-"" + datotid.getFullYear();" & VbCrLf
   
    str = str & "document.SaveForm." & InputNavn & ".value = dato;" & VbCrLf
    str = str & "return true;" & VbCrLf
    str = str & "}" & VbCrLf
   
    str = str & "Function tC(tal){" & VbCrLf
    str = str & "  return (tal>9)?""+tal:""0""+tal;" & VbCrLf
    str = str & "}" & VbCrLf
   
    Check_Dato = str
End function

Så bliver det udskrevet på min side som føglende:

    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.
Avatar billede roenving Novice
10. november 2003 - 14:18 #20
Sekvensen \d{1,2} betyder et eller to cifre, den kan ændres til \d\d eller \d{2}, hvis det skal være to cifre ...

-- og du skal jo så også konsekvensrette i det første check:

    str = "    reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;" & VbCrLf
    str = str & "if(!document.SaveForm." & InputNavn & ".value.match(reg)){" & VbCrLf
    str = str & "  alert(""" & Besked & """);" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".select();" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".focus();" & VbCrLf
    str = str & "  return false; ;" & VbCrLf
    str = str & "}" & VbCrLf


-- og der er to fejl i tC:

function tC(tal){
  return (tal>9)?""+tal:"0"+tal;
}

    str = str & "function tC(tal){" & VbCrLf
    str = str & "  return (tal>9)?""""+tal:""0""+tal;" & VbCrLf
    str = str & "}" & VbCrLf

-- men ellers skulle det virke, for det bliver samme kode jeg har !-)
Avatar billede tblaster Nybegynder
10. november 2003 - 14:47 #21
Nu bliver hele min valider funktion udskrevet som følgende:

function valider(f){
if (document.SaveForm.Navn.value == '')
{
alert("Du mangler at angive et navn")
return false; ;
}
if (document.SaveForm.Brugernavn.value == '')
{
alert("Du mangler at angive et brugernavn")
return false; ;
}
if (document.SaveForm.Email.value == '')
{
alert("Du mangler at angive en email")
return false; ;
}
var regexp = /^\w{1}[\w\.\-]*@\w{1}[\w\-]*\.\w{2}\w*$/i;
if(!f.Email.value.match(regexp)){
alert("Email adressen er ikke gyldig")
f.Email.select();
f.Email.focus();
return false; ;
}
if (document.SaveForm.Spørgsmål.value == '')
{
alert("Du mangler at angive et spørgsmål")
return false; ;
}
if (document.SaveForm.Svar.value == '')
{
alert("Du mangler at angive et svar")
return false; ;
}
if (document.SaveForm.StartDato.value == '')
{
alert("Du mangler at angive en startdato")
return false; ;
}
    reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;
if(!document.SaveForm.StartDato.value.match(reg)){
  alert("Datoen er ikke gyldig. Den skal være i formatet 24-12-2003");
  document.SaveForm.StartDato.select();
  document.SaveForm.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;
}
if (document.SaveForm.SlutDato.value == '')
{
alert("Du mangler at angive en slutdato")
return false; ;
}
    reg = /^\d{1,2}\:\d{1,2}$/;
if(!f.SlutDato.value.match(reg)){
  alert("Tiden er ikke gyldig. Den skal være i formatet 07:53");
  f.SlutDato.select();
  f.SlutDato.focus();
  return false;
}
}
</script>

Den melder fejl i denne:

{
alert("Du mangler at angive en slutdato")
return false; ;
}

Med fejlen:
'return' statement outside of function.

Desuden så checker den ikke felterne når jeg trykker på submit.
Avatar billede tblaster Nybegynder
10. november 2003 - 15:06 #22
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.
Avatar billede tblaster Nybegynder
10. november 2003 - 15:08 #23
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?
Avatar billede tblaster Nybegynder
10. november 2003 - 15:10 #24
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!
Avatar billede roenving Novice
10. november 2003 - 15:18 #25
Ændr denne linje:

reg = /^\d{1,2}\-\d{1,2}\-\d{4}$/;

til:

reg = /^\d{1,2}\-\d{1,2}\-\2d{3}$/;

-- 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 !-)

if(t[0][0]!=datotid.getDate()||t[0][1]!=(datotid.getMonth()+1)||t[0][2]!=datotid.getFullYear()){
Avatar billede tblaster Nybegynder
10. november 2003 - 15:23 #26
Nu accepter den ingen datoer. Heller dage i dag: 10-11-2003
Avatar billede tblaster Nybegynder
10. november 2003 - 15:25 #27
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:

Function Check_Tid(InputNavn, Besked)
    dim str
    str = str & "      reg = /^\d{2}\:\d{2}$/;" & VbCrLf
    str = str & "if(!document.SaveForm." & InputNavn & ".value.match(reg)){" & VbCrLf
    str = str & "  alert(""" & Besked & """);" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".select();" & VbCrLf
    str = str & "  document.SaveForm." & InputNavn & ".focus();" & VbCrLf
    str = str & "  return false;" & VbCrLf
    str = str & "}" & VbCrLf
    Check_Tid = str
End function

Hvor det eneste jeg mangler er at kunne checke at første tal er mellem 00 og 23 og det andet er mellem 00 og 59
Avatar billede roenving Novice
10. november 2003 - 19:16 #28
reg = /^([0-1][0-9])|(2[0-3])\:[0-5][0-9]$/
Avatar billede roenving Novice
10. november 2003 - 19:21 #29
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 ...

-- men ellers:

reg = /^(([0-2][0-9])|(3[01]))\-((0[0-9])|(1[0-2]))\-2\d{3}$/
Avatar billede tblaster Nybegynder
11. november 2003 - 08:59 #30
Så køre det! Thx ... smid et svar!
Avatar billede tblaster Nybegynder
11. november 2003 - 10:10 #31
Der er vist lige et ekstra problem. Jeg får en fejl om at 't' is undefined når jeg benytter min kode i følgende sammenhæng:

Response.write "<form method=""post"" action=""vis.asp?ModulID=7&TemaOmrådeID=" & Request("TemaOmrådeID") & "&Mode=Ret&InformationsstyringID=" & Request("InformationsstyringID") & """ name=""SaveForm"" ID=""Form1"">"

...

          <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;
}
Avatar billede tblaster Nybegynder
11. november 2003 - 13:21 #32
Glem det sidste ... smid et svar ... jeg har fået det til at virke! Thx for hjælpen!
Avatar billede roenving Novice
12. november 2003 - 01:17 #33
Velbekomme '-)
Avatar billede roenving Novice
12. november 2003 - 15:44 #34
-- og tak for points ;~}
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester