Avatar billede cronck Nybegynder
06. maj 2004 - 15:09 Der er 18 kommentarer og
1 løsning

Validering af form felter

Jeg har dette script som tjekker form felter for ugyldige tegn....
Hvordan får jeg det til at virke med linjeskift? har prøvet at lægge " & vbCrlf til, til sidst, men det virker nada... :)
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
function validate(field) {
var valid = "äöÅÄÖ_-æøÅÆØ.,QWERTYUIOPÅØÆLKJHGFDSAZXCVBNMmnbvcxzøælkjhgfdsaåpoiuytrewq1234567890?!():; " & vbCrlf
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) {
temp = "" + field.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") ok = "no";
}
if (ok == "no") {
alert("You are using invalid characters!");
field.focus();
field.select();
  }
}
//  End -->
</script>
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:04 #1
ville det ikke være lettere at bruge en regular expression:
<script language="javascript" type="text/javascript">
function validate(field) {
var ok = true;
if (field.value.match(/[^\w\?\!\(\)\:\;\n ]/ig)) ok = false;
if (!ok) {
alert("You are using invalid characters!");
field.focus();
field.select();
  }
}
  </script>

Kan være jeg har glemt nogle characters - men pointen her er at bruge \n som tegn på en ny linie.
Avatar billede cronck Nybegynder
06. maj 2004 - 16:19 #2
Jeg forstår ikke helt..
Men du må gerne lave det så det bare tjekker om %,',",= er brugt...?
Avatar billede cronck Nybegynder
06. maj 2004 - 16:21 #3
Det script du postede kan heller ikke lide linieskift...
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:36 #4
der skulle også stå \r - som matcher en "tryk på retur-tasten", altså:
if (field.value.match(/[^\w\?\!\(\)\:\;\n\r ]/ig)) ok = false;

Du kan relativt let tilføje ekstra tegn: Bare skriv tegnet og (for en sikkerheds skyld) skrive \ foran (også hvis du vil tillade \-tegnet). Grunden til at man sætter \ foran er hvis javascript tolker tegnet som et specielt tegn i en regular expression. Det er ikke alle du skal gøre det ved, men hvis du i forvejen ikke kender til regular expressions så vil jeg anbefale dig i starten bare at gøre det foran alle de specielle tegn du bruger.

Det er temmelig svært at lære regular expressions, så her er hvordan jeg vil skrive det samlede resultat med de ekstra tegn:
if (field.value.match(/[^\w\?!\(\):\;\n\r%\,\.\'\" ]/ig)) ok = false;
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:39 #5
Kig evt. her for at se de forskellige specielle tegn i regular expressions:
http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/regexp.html

Jeg kender ikke umiddelbart en god tutorial, men prøv at søge lidt rundt på nettet - der finder du sikkert noget godt om emnet. Jeg vil i hvert fald anbefale dig at forsøge på at lære regexp's, da de kan være meget nyttefulde specielt når man skal validere brugerens input.
Avatar billede cronck Nybegynder
06. maj 2004 - 16:42 #6
Linieskift virker med if (field.value.match(/[^\w\?!\(\):\;\n\r%\,\.\'\" ]/ig)) ok = false;
Takker for hjælpen.. Svar! :D
Avatar billede cronck Nybegynder
06. maj 2004 - 16:43 #7
Nej, vent.. Man kan bruge %, ' og "
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:47 #8
mangler der nogle tegn?

= tegnet skal måske med eller hvad?
if (field.value.match(/[^\w\?!\(\):\;\n\r%\,\.\'\"= ]/ig)) ok = false;
Avatar billede cronck Nybegynder
06. maj 2004 - 16:47 #9
Hvordan slår jeg det fra igen?
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:48 #10
svarer lige :-)
Avatar billede cronck Nybegynder
06. maj 2004 - 16:48 #11
= gør vist ikke så meget...
Det kan da ikke lave rod i mine ASP koder hvis folk kan heller ikke kan taste det andet vel?
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:53 #12
det kommer jo an på hvad man skal bruge det til - men generelt så nej. Hvad er det for nogle tegn du tænker på?
Avatar billede cronck Nybegynder
06. maj 2004 - 16:55 #13
' og " så kan folk jo lave det der snedige trick... ' OR 1=1 '

Jeg har redigeret den lidt...
if (field.value.match(/[^\w\?!\(\):\;\n\r%\,\.\ ]/ig)) ok = false;
Hvilke tegn blocker den helt præcist nu?
Og hvordan får jeg den til at blocke < > og %?
Avatar billede skovenborg Nybegynder
06. maj 2004 - 16:58 #14
scriptet er lavet så den blocker alt hvad der ikke passer ind i de tegn du har skrevet i din regular expression - det er derfor der står ^ i starten. Hvis du vil blocke % skal du bare fjerne det fra field.value.match(....)

Læg mærke til at jeg bruger \w - den tillader her alle bogstaver (a-z), alle tal samt underscore (_).
Avatar billede cronck Nybegynder
06. maj 2004 - 17:13 #15
Ok... Takker tusinde gange for hjælpen...
En anden ting som jeg lige vil spørge om:
Kan man ikk få den til at markere det stykke som er ugyldigt text?
Avatar billede skovenborg Nybegynder
07. maj 2004 - 00:26 #16
prøver lige at finde ud af noget - men har kun fundet indtil videre en metode i mozilla. Så hvis du kan vente lidt skal jeg se hvad jeg kan finde ud af :-)
Avatar billede skovenborg Nybegynder
07. maj 2004 - 01:16 #17
sådan - det skulle gerne virke i både IE og Mozilla - i Opera er der ikke så vidt jeg kender en mulighed for at lave en lignende trick:
<script language="javascript" type="text/javascript">
function validate(field) {
var ok = true;
var pos = field.value.search(/[^\w\?!\(\):\;\n\r%\,\.\ ]/ig);
if (pos != -1) ok = false;
if (!ok) {
alert("You are using invalid characters!");
field.focus();
placeCursor(field,pos);
  }
}
function placeCursor(frmElm,pos) {
    if (document.selection) {
          r = frmElm.createTextRange();
          var endp = -(frmElm.value.length-(pos+1));
          r.moveEnd("character",endp);
          r.moveStart("character",pos);
          r.select();
    }
    if (frmElm.selectionEnd != undefined && pos != undefined) {
        frmElm.setSelectionRange(pos,pos+1);
    }
}
  </script>

Læg mærke til at den kun markerer det første bogstav, der er forkert. Det er nemlig ikke muligt at markere forskellige dele af teksten samtidig, derfor måtte jeg vælge at holde mig til det enkelte bogstav.
Avatar billede cronck Nybegynder
07. maj 2004 - 07:39 #18
Tusind tak for hjælpen.. Det kalder jeg sq for en guttermand! :D
Avatar billede skovenborg Nybegynder
07. maj 2004 - 13:52 #19
det var så lidt - og tak for point :-)
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