RC1 Skrevet 3. juli 2007 Del Skrevet 3. juli 2007 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. 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
Gjest Slettet+142 Skrevet 3. juli 2007 Del Skrevet 3. juli 2007 http://norskwebforum.no/pastebin/6204 Ellers kan du prøve Google Lenke til kommentar
jorgis Skrevet 4. juli 2007 Del Skrevet 4. juli 2007 (endret) 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) ? 1 : 0; } ?> Håper det virket oppklarende. EDIT: Fikset litt formatering. Endret 4. juli 2007 av jorgis Lenke til kommentar
RC1 Skrevet 4. juli 2007 Forfatter Del Skrevet 4. juli 2007 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
jorgis Skrevet 5. juli 2007 Del Skrevet 5. juli 2007 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
Peter Skrevet 5. juli 2007 Del Skrevet 5. juli 2007 Får vel begynne å promotere Zend Framwork litt. http://framework.zend.com/manual/en/zend.validate.html Flere måter å bruke det på. Enten via den statiske metoden "is()" som vist her eller ved å bruke klassen Zend_Validate_EmailAddress slik. Lenke til kommentar
RC1 Skrevet 6. juli 2007 Forfatter Del Skrevet 6. juli 2007 (endret) 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? Endret 6. juli 2007 av RC1 Lenke til kommentar
Wabby Skrevet 17. juli 2007 Del Skrevet 17. juli 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå