Walidacja e-mail w php

0

Witam

Mam pewien skrypt do rejestracju uzytkownikow na stronie i dopisalem do kodu linijke odpowiedzialna za sprawdzanie poprawnosci wpisanego adresu e-mail, ale zawsze jak nawet jest wpisany adres e-mail to mi wywala ze ZLY ADRES E-MAIL
Czy tu gdzies cos zle poskladalem czy kod zawiera jakis blad?

   if(empty($_POST["userName"]) || empty($_POST["userSurname"]) || empty($_POST["userLogin"]) 

|| empty($_POST["userPassword1"]) || empty($_POST["userPassword2"]) || empty($_POST

["userEmail"]))
   {
       $errorMessage = "Wypełnij wszystkie pola";
   }
   elseif($_POST["userPassword1"]!=$_POST["userPassword2"])
   {
       $errorMessage = "Podane hasła różnią się od siebie";
   }
   elseif(strlen(trim($_POST["userLogin"])) < 4 || strlen(trim($_POST["userPassword1"])) <4 )
   {
       $errorMessage = "Nazwa użytkownika oraz hasło muszą mieć przynajmniej 4 znaki";
   }
   elseif(mysql_num_rows($loginAble)==1)
   {
       $errorMessage = "Podana nazwa uzytkownika jest juz zajęta";
   }
   elseif(mysql_num_rows($emailAble)==1)
   {
       $errorMessage = "Podany adres e-mail już istnieje w serwisie";
   }
# KOD ODPOWIEDZIALNY ZA SPRAWDZANIE ADRESU E-MAIL
elseif(!eregi('|^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$|e', $userEmail))

{
$errorMessage = "Zły adres e-mail";
}

</php>
0
  1. zapomnij o eregi i używaj preg_match
  2. o ile się nie mylę, eregi nie używa znaków otaczających regexy [tu "|"] ani flag [tu "e"]
0

hmm chyba i stosowalem te preg_match bo gdzies w necie to znalazlem, ale tak samo pomimo podanego prawidlowo emaila wywalalo mi kimunkat ze zmiennej $errorMessage

jak odpale apacha to przetestuje jeszcze.

0

Ten regex o kant tyłka rozbić, waliduje oba wpisy:
[email protected]
nieprawidlowy@mail

Polecam do poduszki: http://4programmers.net/Forum/viewtopic.php?id=112981

0

Jeśli masz PHP 5.2 lub nowsze to użyj TEGO i sprawa załatwiona. Jeśli nie, to potrzebujesz czegoś między prostym sprawdzeniem czy w adresie email jest małpa i w marę normalna domena, a oficjalnym regexpem do sprawdzania maili - http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html (wygląda na perlowski, więc może ruszy w preg_match)

Ale zanim weźmiesz się do kombinowania, to zauważ, że użytkownik może jako email podać [email protected]
Poprawny adres email? Poprawny. Należy do użytkownika? Raczej ;-) nie. Więc zrób możliwie prostą walidację adresu email, a następnie wyślij na niego link aktywacyjny. Będziesz miał większą pewność niż stosując najlepsze regexpy.

0

przed TLD masz kropkę, która nie jest poprzedzona znakiem ucieczki - nic dziwnego że zwaliduje wszystko. Kropka to dowolny znak.

0

Swego czasu na wikipedii umieściłem w pełni poprawny regexp w 100% zgodny ze specyfikacją wprowadzającą adres e-mail.
Częstym błędem jest np:
"uznawanie takiego oto adresu emailowego od razu za niepoprawnego mimo, że jest zgodny ze specyfikacją"@prywatny.serwer.pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1