Avatar billede TumseMM Nybegynder
25. oktober 2011 - 18:42 Der er 10 kommentarer og
1 løsning

E-mail validering

Hej eksperten!

Min e-mail validering kan jeg simpelthen ikke få til at virke..

    if(!preg_match("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email))
    {
    echo '<p style="color:red";>'."Din E-mail er forkert!".'</p>';
    $error=1;
    }   

den ser sådan her ud, men ligemeget hvad skriver den bare:

Din E-mail er forkert!

Og her er scriptet der indsætter ind i databasen:

if(!$error)
    {       
        $sql="INSERT INTO `users` (`username`,`password`,`email`) VALUES ('".$username."','".$password1."','".$email."')";
        mysql_query($sql) or die(mysql_error());
        echo '<b style="color:blue";>'."Du er nu klar! Log ind ovenover!".'</b>';   
    }

Tak på forhånd!
Avatar billede olsensweb.dk Ekspert
25. oktober 2011 - 18:54 #1
kunne det tænkes du mangler en delimiter (/) i starten og slutningen ??
http://dk2.php.net/manual/en/function.preg-match.php
if(!preg_match("/^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]/", $email))
Avatar billede olsensweb.dk Ekspert
25. oktober 2011 - 18:56 #2
som function
function IsValidEmailAddress($email){
    return preg_match("/^[a-z0-9]+[a-z0-9_-]+@[a-z0-9]+[a-z0-9.-]+[a-z0-9]+.[a-z]{2,4}$/i", $email);
}
Avatar billede olebole Juniormester
25. oktober 2011 - 19:02 #3
<ole>

Der er også en square bracket for meget i slutningen af mønstret. Desuden har jeg slette de store bogstaver - og gjort søgningen case insensitive:


if (!preg_match("/^[a-z0-9_]+@[a-z0-9\-]+\.[a-z0-9\-\.]+$/i", $email)) {



/mvh
</bole>
Avatar billede olebole Juniormester
25. oktober 2011 - 19:04 #4
@ronols: Så er vi næsten enige. Visse domæner vil dog have svært ved at slippe igennem #2 - herunder museum  *o)
Avatar billede olsensweb.dk Ekspert
25. oktober 2011 - 19:23 #5
hej ole,
jeg giver dig ret i det burde være extension min 2 karakter max 4 karakterer men den ignorer tilsyneladende 4 tallet ?

jeg prøvede lige
<?php
function IsValidEmailAddress($email){
    return preg_match("/^[a-z0-9]+[a-z0-9_-]+@[a-z0-9]+[a-z0-9.-]+[a-z0-9]+.[a-z]{2,4}$/i", $email);
}

$str1 = "olebole@dengodecode.museum";
$str2 = "ronols@olsensweb.dk";
$fejl = "fejl@@gir.ingen.mening.dk";

echo IsValidEmailAddress($str1);
echo "<br />";
echo IsValidEmailAddress($str2);
echo "<br />";
echo IsValidEmailAddress($fejl);
?>

output
1
1
0
Avatar billede olebole Juniormester
25. oktober 2011 - 19:48 #6
Mon ikke det skyldes dette punktum: [a-z0-9.-]?
Avatar billede TumseMM Nybegynder
25. oktober 2011 - 20:20 #7
det var bare punktummet, som du sagde olebole :) giv et svar, I har begge været til stor hjælp :)

Men hvad er fordelen ved ronols idé med en function?
Avatar billede olsensweb.dk Ekspert
25. oktober 2011 - 20:26 #8
#6
>Mon ikke det skyldes dette punktum: [a-z0-9.-]?
hvis det er sandt så burde den jo melde fejl ved tld check, da den så ikke bliver udført
tld check = .[a-z]{2,4}

men indrømmet regex er ikke min stærke side, finder udtrykkene på nettet, og modificerer dem evt lidt

jeg har nu omskrevet min function til at bruge dit udtryk, da det er lidt kortere til senere brug.
her er også et udtryk http://www.regular-expressions.info/email.html

#7
>Men hvad er fordelen ved ronols idé med en function?
genbrug, lettere forståelsen af code
Avatar billede olsensweb.dk Ekspert
26. oktober 2011 - 13:29 #9
jeg må desværre meddele det regulære udtryk i #3 ikke virker helt, der skal kunne være punktummer før @

prøv feks denne mail addresse
$str1 = "ole.bole@dengodecode.museum"; // skulle værer lovlig, men melder fejl
$str1 = "olebole@den.gode.code.museum"; // kommer igennem OK

jeg tog udtrykket "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$" her fra http://www.regular-expressions.info/email.html
og lavede det lidt om, så det tilsyneladende virker, eneste check på tld længde er mindst 2 karakterer i området a-z

<?php
function IsValidEmailAddress($email){
    return preg_match("/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i", $email);
}
// lovlige
$str1 = "olebole@den.gode.code.museum";
$str2 = "ron.ols@olsensweb.dk";
$str3 = "ronols@test.olsensweb.dk";
// ulovlig
$fejl = "fejl@@gir.ingen.mening.dk"; // dobbelt @
$fejl1 = "fejl@gir.ingen.mening.d"; // ulovlig tld,
echo IsValidEmailAddress($str1); echo "<br />";
echo IsValidEmailAddress($str2); echo "<br />";
echo IsValidEmailAddress($str3); echo "<br />";
echo IsValidEmailAddress($fejl); echo "<br />";
echo IsValidEmailAddress($fejl1);
?>


output
1
1
1
0
0


nogle af de link jeg har samle om regexp
http://www.phpartikler.dk/artikler/regexp.php
http://regexlib.com/Search.aspx?k=&c=1&m=-1&ps=20
http://lawrence.ecorp.net/inet/samples/regexp-format.php
http://www.nielsgamborg.dk/wordpress/programmering/regulaere_udtryk_regular_expressions.htm
http://xregexp.com/
Avatar billede TumseMM Nybegynder
26. oktober 2011 - 20:32 #10
Hej igen ronols :)

giv et svar :)
det er nogle smarte ting, du kommer frem med :)
Avatar billede olsensweb.dk Ekspert
26. oktober 2011 - 21:37 #11
svar
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