Avatar billede ssv Nybegynder
08. oktober 2008 - 22:07 Der er 28 kommentarer og
1 løsning

Hjælp til forskellige 'valideringer' af indhold i form

Hello.

Jeg skal bruge en "saml-selv løsning" til forskellige validering af forme. Saml-selv skal forstås på den måde, at jeg gerne vil have hjælp til at validere indhold af forskellige inputs i en form før den submittes - og jeg vil gerne vide hvordan hver del i formen kan valideres, så jeg til syvende og sidst selv kan sammensætte min egen validering.

Jeg skal bruge hjælp til at:
- Validere et tekst input og returnere med en fejl hvis input'et ikke er valideret
- Validere radio buttons. Hvis ingen af fx 2 radio buttons er valgt skal der returneres en fejlbesked.
- Validere textareas (jeg ved ikke om det går ind under validering af et tekst felt - i så fald, glem dette punkt :-))
- Validere tekst input hvor der er angivet en value - fx "Navn". Hvis brugeren så vil submitte formen og "Navn" eller ingenting står i feltet skal der igen meldes om en fejl.

Med "validering" mener jeg at tjekke feltet og hvis nu der fx ikke er skrevet noget indhold i feltet skal brugeren mødes med en alert der minder dem om det. Simpelt.

Ellers, spørg. Det er sikkert noget værre sludder jeg har skrevet :-)
Avatar billede w13 Novice
08. oktober 2008 - 22:18 #1
Altså du kan jo teste, om et felt er blankt med:

if(document.getElementById("felt-id").value===""){
  alert("Feltet er blankt!");
  document.getElementById("felt-id").focus();
  return false;
}

Denne sætter også fokus i feltet og afslutter funktionen.

Jeg mener også, du kan teste textareas på præcis samme måde, dvs. med ".value".

Og til det med "Navn" så må det blive:

if(document.getElementById("felt-id").value===""'||document.getElementById("felt-id").value===document.getElementById("felt-id").defaultValue{
  alert("Feltet er skal udfyldes korrekt!");
  document.getElementById("felt-id").focus();
  return false;
}

Her testes dog ikke på "Navn", men på om der står en anden værdi i boksen end den, der stod, da siden blev loadet.
Dette gøres med ".defaultValue".
Avatar billede w13 Novice
08. oktober 2008 - 22:19 #2
Hov, den sidste funktion skulle være:

if(document.getElementById("felt-id").value===""'||document.getElementById("felt-id").value===document.getElementById("felt-id").defaultValue{
  alert("Feltet er skal udfyldes korrekt!");
  document.getElementById("felt-id").focus();
  return false;
}

Og nå ja, radiobuttons:

if(!document.getElementById("radio-id1").checked&&!document.getElementById("radio-id2").checked){
  alert("Du skal vælge en radiobutton!");
  return false;
}
Avatar billede ssv Nybegynder
08. oktober 2008 - 23:43 #3
Jeg kan ikke rigtig få det til at spille her. Har du noget imod at sætte et fuldt eksempel op?
Avatar billede ssv Nybegynder
08. oktober 2008 - 23:49 #4
Og lige en ekstra ting:

Hvordan kan jeg validere et felt der skal indeholde bestemte tegn - eksempelvis hvor "@" og "." skal indgå i inputet før den kan godkendes.
Avatar billede ssv Nybegynder
09. oktober 2008 - 00:02 #5
Og lige en ekstra tilføjelse - så vil jeg også gerne kunne validere et felt på ulovlige tegn - altså alerte folk hvis de bruger ulovlige tegn, såsom "div", "span" osv.

Og så skal jeg nok stoppe tilføjelserne ;-)
Avatar billede olebole Juniormester
09. oktober 2008 - 02:14 #6
<ole>

Du angriber 'sikkerhed' og 'validering' fra den forkerten ende. Hvis du forsøger at definere, hvad folk ikke må skriver, har du tabt på forhånd ... du har ikke fantasi til at forestille dig, hvad kreative folk med skumle hensigter kan finde på  ;o)
Beslut dig i stedet for, hvad du vil godtage - og så skal du sikre dig, der ikke skrives andet.

Designerdrugs er et meget godt billede på fænomenet. Aldrig så snart et stof bliver forbudt, dukker samme stof op, hvor et enkelt atom i molekylestrengen er skiftet ud ... voila - et nyt, ikke-forbudt stof (= et nyt lovligt stof). Der findes bunker af variationer over temaerne LSD, kokain og amfetamin - alle skabt af én og samme grund. It's the never ending story  ;o)

/mvh
</bole>
Avatar billede schwarz84 Nybegynder
09. oktober 2008 - 09:15 #7
Du skal også huske at det ikke er nok at tjekke på klientsiden. Du skal også tjekke på serveren for folk kan så let som ingenting slå javascript fra..
Avatar billede ssv Nybegynder
09. oktober 2008 - 11:10 #8
Nu taler vi om super simpel validering her - det gør intet at folk kan slå javascript fra og stadig komme igennem, for folk der har slået javascript fra har ingen adgang til siden ;-)

Men altså, keep in mind at det ikke er det helt store tekniske helvede vi er ude i.

Så, talbage til forrige besked: Er der nogen der er friske på at sætte et fuldt eksempel op?
Avatar billede zips Juniormester
09. oktober 2008 - 12:33 #9
Hvis det skal være nemt og simpelt vil jeg anbefalde denne http://www.javascript-coder.com/html-form/javascript-form-validation.phtml

Nem og hurtig at bruge, derefter kan du lave dit tjek på din server :)
Avatar billede ssv Nybegynder
09. oktober 2008 - 14:30 #10
Det virker jo genialt, zips. Jeg har dog lige problemer med at checke om radio buttons er valgt - er det evt. noget du kan hjælpe med?

Med w13's bidrag synes jeg i to skal dele pointene, så smit et svar :-)
Avatar billede ssv Nybegynder
09. oktober 2008 - 15:27 #11
Og så opdagede jeg lige en kritisk 'fejl': Scriptet kan ikke validere danske tegn (æ, ø og å) - hvordan retter jeg det? Jeg har fundet funktionen i javascriptet, men retter jeg i den fejler scriptet. Så før jeg uddeler point vil jeg gerne have en løsning ;-)
Avatar billede zips Juniormester
09. oktober 2008 - 15:43 #12
Ja det er rigtigt med æøå, jeg har dette i min fil
case "alpha":
{
var charpos = objValue.value.search("[^A-Za-z\æÆøØåÅ ]");
Det virker hos mig :)

Radio buttons kan du lave på denne måde, hvor pizzasize er nman på dine ragio buttons frmvalidator.addValidation("pizzasize","selone_radio");
Avatar billede ssv Nybegynder
09. oktober 2008 - 16:00 #13
Skal jeg rette:

        case "alpha":
          {
                ret = TestInputType(objValue,"[^A-Za-z]",strError,
                        objValue.name+": Only alphabetic characters allowed ");
                break;
          }

-- med --

case "alpha":
{
var charpos = objValue.value.search("[^A-Za-z\æÆøØåÅ ]");

-- Eller hvordan? :-)


Nu skal jeg også kunne godkende æ, ø og å i emails fx. Så, hvordan gør vi det :-)?
Avatar billede zips Juniormester
09. oktober 2008 - 16:06 #14
Indsæt æÆøØåÅ i TestInputType(objValue,"[^A-Za-z]",strError, så det bliver
TestInputType(objValue,"[^A-Za-z\æÆøØåÅ ]",strError,
Så tager den æÆøØåÅ og mellemrum
Avatar billede ssv Nybegynder
09. oktober 2008 - 16:14 #15
Og hvad med emails? :-)
Avatar billede zips Juniormester
09. oktober 2008 - 16:23 #16
Dette har jeg ikke testet, da æøå ikke rigtigt er understøttet endnu, men vil mene du kan sætte det ind her var regexp_domain=/^[\w-\.]*\.[A-Za-z\æÆøØåÅ]{2,4}$/; men har ikke testet det....
Avatar billede ssv Nybegynder
09. oktober 2008 - 16:28 #17
Det dur ikke rigtig. Jeg ved godt det ikke er særlig udbredt, men man kan jo altid forberede sig på det. Så jeg mangler stadig en løsning til det :-)
Avatar billede olebole Juniormester
09. oktober 2008 - 16:53 #18
<ole>

Hvorfor prøver I ikke at bruge en RegExp i stedet?

Hint: Tjek lige syntaksen:
    STRING.search("[^A-Za-z\æÆøØåÅ ]");  ;o)

/mvh
</bole>
Avatar billede zips Juniormester
09. oktober 2008 - 17:16 #19
Prøv dette

function validateEmail(email)
{
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.\æøåÆØÅ]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.\æøåÆØÅ]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
        var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
        if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}
Avatar billede roenving Novice
09. oktober 2008 - 17:29 #20
Hrm, zips, du har vist overset de gældende regler for mail-adressers udseende, for ifølge rfc 2821 er den eneste, der nogensinde må checke validiteten af det, der står foran @-tegnet, mail-hosten, så faktisk er @ksdhsd.dk en ganske gyldig mail-adresse !-)

-- og det er f.eks.

"kjk"@kjlasj.dk

"hjkhg@jkklj"@jkhjkf.dk

osv. også ...

-- og så indeholder shorttagget \w _altid_ også underscore, i visse regex-implementationer også locale-specifikke tegn ...

-- og hvis du vil godkende æøå, så er det vel også i orden at hedde René, Kühle m.m.fl. !-)
Avatar billede zips Juniormester
09. oktober 2008 - 17:37 #21
Ja ja jeg ved intet om det... det er så sandt som du skriver det...
men det ved jeg du gør, så vil du måske lige sætte æøå ind som ssv ønsker det?

Du har jo skrevet denne 22/04-2005 11:21:24 http://www.eksperten.dk/spm/604784?Esession=f6434d35c56262039cb62e679118cb31 som forklare lidt om alle de tegn som bruges til at tjekke mail, men kunne ikke se noget om rfc 2821

Men altid klar til at lære af en som ved noget :)
Avatar billede olebole Juniormester
09. oktober 2008 - 17:37 #22
Hvad laver backslash'en før det lille 'æ'?

Derudover bliver det noget af en mother, hvis den skal tjekke en email 100%. Nøjes med at tjekke de mest oplagte fejl  ;o)
Avatar billede ssv Nybegynder
10. oktober 2008 - 12:38 #23
Jeg må igen skuffe og sige at dit bud, zips, ikke fungerer. Men okay, smid et svar for forsøg på at løse problemet :-)
Avatar billede zips Juniormester
10. oktober 2008 - 15:44 #24
Hvilken mail adresse er det du vil kunne sende?

Helt sikkert noget roenving eller olebole kan fikse for dig, eller også kunne w13 hjælpe med det, jeg har forsøgt nok med dårlige forsøg på noget jeg ikke ved noget om :)

ja den backslash kan fjernes som olebole henviser til :)

Med det jeg forsøgte virker med æøå@æøå.dk men jeg har ikke læst rfc 2821 som roenving henviser til, men vil da gøre.

Som du skriver 09/10-2008 16:28:03 mangler du stadig en løsning på æøå i mail adresse
Avatar billede roenving Novice
10. oktober 2008 - 15:49 #25
>>zips

Prøv f.eks. at kigge på http://www.unix.com.ua/rfc/rfc2821.html sektion 2.3.10 !-)

-- og der skal selvfølgelig stå:

... så faktisk er @ksdhsd.dk en ganske gyldig mail-adresse set fra vores synspunkt !-)
Avatar billede zips Juniormester
10. oktober 2008 - 16:14 #26
>> roenving

Det vil sige at man behøver ikke at valider det som kommer før @ kun det efter?

Det er godt nok en lang tung sag at læse :)

Men når nu ssv ønsker at bruge domæne med æøå og mail adresse også med æøå, hvordan kan dette så valideres
Avatar billede roenving Novice
10. oktober 2008 - 16:33 #27
Tjah, jeg tog for et par år siden og lavede en streng, der gav mig alle de tegn, man kan lave med et almindeligt windows-tastatur (og som følgelig har en eller anden validitet i mit locale !-) og smed dem ind i en validering, f.eks. sådan:

  var t = "\\wáàãäâæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("^.*@["+t+"]["+t+"\\.\\-]*\\.[a-z]{2,6}$","i");
  tekst=f.mail.value.toLowerCase();
  if (!regexp.test(tekst)||tekst.match(/\.\.|\.@|-@|--/)){
      alert ("Der skal stå en gyldig e-mail adresse i mail feltet");
      f.mail.focus();
      return false;
  }
Avatar billede olebole Juniormester
10. oktober 2008 - 16:34 #28
Som sagt plejer konklussionen blandt kodere at være: "Nøjes med at tjekke de mest oplagte fejl" - og hvis jeg ikke husker helt forkert, så er roenving én af dem, jeg er nået til koncensus med på dette område  =)
Avatar billede zips Juniormester
10. oktober 2008 - 16:47 #29
Jeg kan godt se at mit link  som jeg gav ssv 09/10-2008 12:33:43 kun valider det mest oplagte og derfor mente jeg det netop var nemt og simpelt at bruge.

At han ville valider æøå i mail adressen, noget jeg ikke selv gør, var jeg dum nok til at prøve noget jeg ikke har forstand på :)

Men er som altid glad for at høre fra dem som ved noget og som har stor indsigt i det i skriver om, på den måde lære jeg jo netop det rigtige :)
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