Avatar billede laurents Nybegynder
16. juni 2011 - 19:59 Der er 12 kommentarer og
1 løsning

Reg.Exp - undgå mere end een mailadresse i felt

Hej,

Jeg har følgende check på et felt i en form, som checker om der er tastet en emailadresse ind i form feltet:

var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
var regexp = new RegExp("^.*?@["+t+"]["+t+"\\.\\-]*\\.[a-z]{2,6}$","i");
tekst=PW.infoemail.value.toLowerCase();

if (!regexp.test(tekst)||tekst.match(/\.\.|\.@|-@|--/))
{alert ("Der skal stå en gyldig e-mail adresse i tekst feltet. Der må kun tastes een email i dette felt!");
PW.infoemail.focus();
return false;}

Den virker som sådan fint, men jeg har problemet, at hvis brugeren skriver "mor@mor.dk og far@far.dk" i feltet (altså 2 emailadresser), så accepteres dette også.

Hvordan kan jeg sikre, at der kun bliver tastet een emailadresse i feltet (f.eks. mor@mor.dk)?
Avatar billede NicolaiErMig Nybegynder
16. juni 2011 - 20:00 #1
Tror der er gået noget galt med dine ellers så fine tegn ;)
Avatar billede janus_007 Nybegynder
16. juni 2011 - 20:21 #2
Der er nu ikke noget i vej med tegn :)

Tjek på mellemrum måske :) eller collection count > 1
Avatar billede laurents Nybegynder
16. juni 2011 - 20:27 #3
@janus_007
Tak for verificeringen - jeg har siddet og checket overens med koden som en gal ;-)

Du kunne vel ikke lige lokkes til at vise mig hvor og hvordan i koden jeg jeg kan bruge dit forslag - jeg er sq ikke helt skarp i reg.exp.?
Avatar billede johny Nybegynder
17. juni 2011 - 08:30 #4
Erstat evt. ".*?" med "\S*?" (Alt undtagen whitespace)
Avatar billede laurents Nybegynder
17. juni 2011 - 08:40 #5
@johny

enten er det ikke tricket - eller også har jeg rettet det forkerte sted - for med denne:
var regexp = new RegExp("^\S*?@["+t+"]["+t+"\\.\\-]*\\.[a-z]{2,6}$","i");
accepterer den slet ikke emailadresse (også selvom den er valid, og at der kun står een emailadresse og ingen blanke)
Avatar billede johny Nybegynder
17. juni 2011 - 09:38 #6
Hmm, jeg prøvede at kopiere følgende ind i Expresso:
^\S*?@[\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ][\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ\.\-]*\.[a-z]{2,6}$

Det virkede upåklageligt?
Avatar billede johny Nybegynder
17. juni 2011 - 09:50 #7
Ah, det er fordi du ikke bruger @ foran din string:
@"^\S*?@["+t+"]["+t+@"\.\-]*\.[a-z]{2,6}$"
Avatar billede laurents Nybegynder
17. juni 2011 - 10:05 #8
@johny
Jeg er sq ked af det, men jeg kan ikke rigtig få det til at spille (jeg indrømmer - jeg fatter minus af regexp ...)

min kode ser således ud nu:

var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
var regexp = new RegExp(@"^\S*?@["+t+"]["+t+@"\.\-]*\.[a-z]{2,6}$");

tekst=PW.infoemail.value.toLowerCase();
                           
if (!regexp.test(tekst)||tekst.match(/\.\.|\.@|-@|--/))
{
alert ("Der skal stå en gyldig e-mail adresse i tekst feltet. Der må kun tastes een email i dette felt!");
PW.infoemail.focus();
return false;
}

og nu validerer den slet ikke email adressen .... kan du se hvor det er jeg laver ged i det?
Avatar billede johny Nybegynder
17. juni 2011 - 10:25 #9
Min fejl, jeg troede det var C# kode. Prøv den her:
"^\\S*?@["+t+"]["+t+"\\.\\-]*\\.[a-z]{2,6}$"
Avatar billede laurents Nybegynder
17. juni 2011 - 10:43 #10
@johny

DU ER MIN VEN - tusind tak! Det virker perfekt!!!
Smid mig lige et svar, så jeg kan give dig lidt point...

Igen, tusind tak for hjælpen!
Avatar billede johny Nybegynder
17. juni 2011 - 11:19 #11
Det var så lidt. :)

Husk dog at perfekt e-mail validering findes ikke, og der vil også være nogen e-mail adresser som ikke vil komme igennem det filter du har lavet, men så taler vi også marginal tilfælde (under 1 pr. 1.000.000 mail adresser vil jeg skyde på).
Avatar billede laurents Nybegynder
17. juni 2011 - 11:24 #12
Du har helt ret - jeg tror nu, at de fleste relevante (for dette site) vil komme igennem uden problemer.... men ja, e-mail validering er sq for viderekommende ;-)
Avatar billede johny Nybegynder
21. juni 2011 - 12:37 #13
Jeg må indrømme at jeg ikke ved om det her virker i javascript, men du kunne overveje at tilføje følgende lige efter '^' tegnet:
(?!.*(?:\\.\\.|\\.@|-@|--))

Så slipper du for at lave de ekstra parsninger du også laver (tekst.match(/\.\.|\.@|-@|--/)).
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
Kurser inden for grundlæggende programmering

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