Gå til innhold

validering av epost adresse


Anbefalte innlegg

Prøver å få til slik at scriptet mitt sjekker om epost adressen er i riktig format.

Men når jeg tester scriptet så får jeg feilmelding både med gyldig og ugyldig epost adresse.

:hmm:

 

 

if( !ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $Epost) || empty($_POST["Epost"]))
{
$error["Epost"] = "Email is not valid or missing.";
$Epost = "";

}
else
$Epost = $_POST["Epost"];

Lenke til kommentar
Videoannonse
Annonse

Om du leser RFCene som omhandler epost-formatet (hovedsakelig RFC822/2822) og RFCen som omhandler domene-formatet, ser du fort at det er en nær umulig oppgave å skrive en enkelt regex som tar med alle unntak og spesialtilfeller. Det er uhyre mange spesialtilfeller som de færreste ville trodd var lovlig. Eksempelvis er det tillatt med endel spesialtegn, og det er f.eks. tillatt med følgende epost-addresse;

 

"jorgis@ epost #~"@øl.localhost

 

Det er likevel lagt ut regexer som skal stemme med RFC2822, kan ta med den ene her (i spoiler)

Klikk for å se/fjerne innholdet nedenfor
This is the full RFC 2822 regular expression for matching

email addresses, with comments already stripped.

 

It weighs in at a tiny 3768 bytes.

 

(((((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d

\x0a)[\x20\x09]+)*))*?(([\x41-\x5a\x61-\x7a]|[\x30-\x39]|[\x

21\x23-\x27\x2a\x2b\x2d\x2e\x3d\x3f\x5e\x5f\x60\x7b-\x7e])+(

\x2e([\x41-\x5a\x61-\x7a]|[\x30-\x39]|[\x21\x23-\x27\x2a\x2b

\x2d\x2e\x3d\x3f\x5e\x5f\x60\x7b-\x7e])+)*)((([\x20\x09]*(\x

0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))

*?)|(((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x

0d\x0a)[\x20\x09]+)*))*?\x22(((([\x20\x09]*(\x0d\x0a))?[\x20

\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))?(([\x01-\x08\

x0b\x0c\x0e-\x1f\x7f]|[\x21\x23-\x5b\x5d-\x7e])|(\x5c([\x01-

\x09\x0b\x0c\x0e-\x7f]|(\x0a*\x0d*([\x00-\x09\x0b\x0c\x0e-\x

7f]\x0a*\x0d*)*))|(\x5c[\x00-\x7f]))))*((([\x20\x09]*(\x0d\x

0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))?\x2

2((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x

0a)[\x20\x09]+)*))*?)|(((((([\x20\x09]*(\x0d\x0a))?[\x20\x09

]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?([\x41-\x5a\x61-

\x7a]|[\x30-\x39]|[\x21\x23-\x27\x2a\x2b\x2d\x2e\x3d\x3f\x5e

\x5f\x60\x7b-\x7e])+((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|(

[\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?)|(((([\x20\x09]*(\x0

d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*

?\x22(((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\

x0d\x0a)[\x20\x09]+)*))?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|[

\x21\x23-\x5b\x5d-\x7e])|(\x5c([\x01-\x09\x0b\x0c\x0e-\x7f]|

(\x0a*\x0d*([\x00-\x09\x0b\x0c\x0e-\x7f]\x0a*\x0d*)*))|(\x5c

[\x00-\x7f]))))*((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x2

0\x09]+((\x0d\x0a)[\x20\x09]+)*))?\x22((([\x20\x09]*(\x0d\x0

a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?))(

\x2e((((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\

x0d\x0a)[\x20\x09]+)*))*?([\x41-\x5a\x61-\x7a]|[\x30-\x39]|[

\x21\x23-\x27\x2a\x2b\x2d\x2e\x3d\x3f\x5e\x5f\x60\x7b-\x7e])

+((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x

0a)[\x20\x09]+)*))*?)|(((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+

)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?\x22(((([\x20\x09]

*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+

)*))?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|[\x21\x23-\x5b\x5d-\

x7e])|(\x5c([\x01-\x09\x0b\x0c\x0e-\x7f]|(\x0a*\x0d*([\x00-\

x09\x0b\x0c\x0e-\x7f]\x0a*\x0d*)*))|(\x5c[\x00-\x7f]))))*(((

[\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[

\x20\x09]+)*))?\x22((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([

\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?)))*))\x40((((([\x20\x

09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x0

9]+)*))*?(([\x41-\x5a\x61-\x7a]|[\x30-\x39]|[\x21\x23-\x27\x

2a\x2b\x2d\x2e\x3d\x3f\x5e\x5f\x60\x7b-\x7e])+(\x2e([\x41-\x

5a\x61-\x7a]|[\x30-\x39]|[\x21\x23-\x27\x2a\x2b\x2d\x2e\x3d\

x3f\x5e\x5f\x60\x7b-\x7e])+)*)((([\x20\x09]*(\x0d\x0a))?[\x2

0\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?)|(((([\x20

\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\

x09]+)*))*?\x5b(((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x2

0\x09]+((\x0d\x0a)[\x20\x09]+)*))?(([\x01-\x08\x0b\x0c\x0e-\

x1f\x7f]|[\x21-\x5a\x5e-\x7e])|(\x5c([\x01-\x09\x0b\x0c\x0e-

\x7f]|(\x0a*\x0d*([\x00-\x09\x0b\x0c\x0e-\x7f]\x0a*\x0d*)*))

|(\x5c[\x00-\x7f]))))*((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)

|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))?\x5d((([\x20\x09]*(\

x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*)

)*?)|((((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((

\x0d\x0a)[\x20\x09]+)*))*?([\x41-\x5a\x61-\x7a]|[\x30-\x39]|

[\x21\x23-\x27\x2a\x2b\x2d\x2e\x3d\x3f\x5e\x5f\x60\x7b-\x7e]

)+((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\x0d\

x0a)[\x20\x09]+)*))*?)(\x2e(((([\x20\x09]*(\x0d\x0a))?[\x20\

x09]+)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?([\x41-\x5a\x

61-\x7a]|[\x30-\x39]|[\x21\x23-\x27\x2a\x2b\x2d\x2e\x3d\x3f\

x5e\x5f\x60\x7b-\x7e])+((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+

)|([\x20\x09]+((\x0d\x0a)[\x20\x09]+)*))*?))*)))

 

 

If you want to strip comments too, you'll need to run this

recursivley until it fails to match:

 

(\x28(((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x20\x09]+((\

x0d\x0a)[\x20\x09]+)*))?(|(\x5c([\x01-\x09\x0b\x0c\x0e-\x7f]

|(\x0a*\x0d*([\x00-\x09\x0b\x0c\x0e-\x7f]\x0a*\x0d*)*))|(\x5

c[\x00-\x7f]))))*((([\x20\x09]*(\x0d\x0a))?[\x20\x09]+)|([\x

20\x09]+((\x0d\x0a)[\x20\x09]+)*))?\x29)

 

Da slike grensetilfeller er uhyre sjeldne (og enkelte vil bare være gyldige på lokalnett etc.), benytter jeg meg av en mye enklere og mer effektiv epost-sjekker;

 

PHP

<?php

/**

 * Verifies that a string actually is an e-mail

 *

 * @param string $email

 * @return bool

 */

function is_valid_email_address($email)

{

$qtext '[^x0dx22x5cx80-xff]';

 

$dtext '[^x0dx5b-x5dx80-xff]';

 

$atom '[^x00-x20x22x28x29x2cx2ex3a-x3c'.

'x3ex40x5b-x5dx7f-xff]+';

 

$quoted_pair 'x5c[x00-x7f]';

 

$domain_literal "x5b($dtext|$quoted_pair)*x5d";

 

$quoted_string "x22($qtext|$quoted_pair)*x22";

 

$domain_ref $atom;

 

$sub_domain "($domain_ref|$domain_literal)";

 

$word "($atom|$quoted_string)";

 

$domain "$sub_domain(x2e$sub_domain)*";

 

$local_part "$word(x2e$word)*";

 

$addr_spec "$local_partx40$domain";

 

return preg_match("!^$addr_spec$!"$email) ? 0;

}

?>

 

Håper det virket oppklarende. :)

 

EDIT: Fikset litt formatering.

Endret av jorgis
Lenke til kommentar

 

Håper det virket oppklarende. :)

 

 

9004614[/snapback]

 

 

Det var vel litt over mine php kunnskaper :!:

Jeg trenger egentlig bare å forsikre meg om at det blir tastet inn noe som inneholder en @

 

Noe ala dette:

 

if( !ereg("*@*.*", $Epost) || empty($_POST["Epost"]) )
{
$error["Epost"] = "Email is not valid or missing.";
$Epost = "";

}
else
$Epost = $_POST["Epost"];

 

Men den koden fungerer ikke noe særlig....

Lenke til kommentar

vil anbefale deg at du bruker is_valid_email_address(), som jeg postet over.

 

if (!is_valid_email_address($_POST['Epost']) || empty($_POST['Epost']))
{
   $error['Epost'] = 'Email is not valid or missing.';
   $Epost = '';
}
else
{
   $Epost = $_POST['Epost'];
}

 

Mye enklere, og så slipper du at folk kan sende inn helt ugyldige adresser. :)

Lenke til kommentar
vil anbefale deg at du bruker is_valid_email_address(), som jeg postet over.

 

if (!is_valid_email_address($_POST['Epost']) || empty($_POST['Epost']))
{
   $error['Epost'] = 'Email is not valid or missing.';
   $Epost = '';
}
else
{
   $Epost = $_POST['Epost'];
}

 

Mye enklere, og så slipper du at folk kan sende inn helt ugyldige adresser. :)

9006435[/snapback]

 

 

 

Har prøvd forslaget ditt men jeg får meldingen "Email is not valid og missing" både når jeg skriver en adresse uten @ og når jeg skriver en fungerende epost adresse.

Kan det være noe andre steder i scriptet som forårsaker dette tro? :hmm:

Endret av RC1
Lenke til kommentar
  • 2 uker senere...

Hadde samme problemet, men denne funker .

Bare bytt ut ;)

 

 


<?php
/**
* Verifies that a string actually is an e-mail
*
* @param string $email
* @return bool
*/
function is_valid_email_address($email) {
$qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
$dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
$atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c'.
'\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
$quoted_pair = '\\x5c\\x00-\\x7f';
$domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d";
$quoted_string = "\\x22($qtext|$quoted_pair)*\\x22";
$domain_ref = $atom;
$sub_domain = "($domain_ref|$domain_literal)";
$word = "($atom|$quoted_string)";
$domain = "$sub_domain(\\x2e$sub_domain)*";
$local_part = "$word(\\x2e$word)*";
$addr_spec = "$local_part\\x40$domain";
return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
}
?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...