Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Mail w wyr. regularnych
Forum PHP.pl > Forum > Przedszkole
Michu
Jak zapisać wyrażenie regularne dla adresu mailowego? Próbowałem już wiele razy, ale za każdym razem ereg() wypluwał false.

Z góry dzięki za odpowiedź, Michu
AxZx
  1. <?php
  2. function valid_email($str)
  3. {
  4. return ( ! preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
  5. }
  6. ?>
Michu
bardzo dziękuję smile.gif
werek
Cytat(AxZx @ 16.12.2007, 20:58:24 ) *
  1. <?php
  2. function valid_email($str)
  3. {
  4. return ( ! preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
  5. }
  6. ?>


preg_match sam w sobie zwraca wartosci typu 0 lub 1 czyli false badz true, wiec dodatkowa forma bedzie raczej niepotrzebna. a nawet gdybysmy potrzebowali zeby bylo wszystko "strict" i wogole to nawet wtedy nie potrzebna jest ta negacja przed preg_match (negacja jest stosowana do typu bool!!!). poza tym regexp jest lekko nie konsekwetny "." to dowolny znak!! jezeli chciales stworzyc forme ktora przyjmowala by taka forme to wyrazenie powinno wygladac tak:

  1. <?php
  2. function valid_email($str)
  3. {
  4. return (preg_match("/^[.a-z0-9_-]+@[a-z0-9-_.]+.[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
  5. }
  6. ?>
Maciekbjw
Jeśli mail dodajesz do bazy, powiedzmy w skrypcie rejestaracji, to rozsądnie jest zastosować coś takiego:
  1. <?php
  2. if(eregi('^[a-zA-Z]+[a-zA-Z0-9_-].*@([a-zA-Z0-9]+){1}(.[a-zA-Z0-9]+){1,2}', stripslashes(trim($_POST['email'])) )){ 
  3.  
  4.  $email = mysql_real_escape_string($_POST['email']);
  5. //zapytanie SQL
  6. }
  7. ?>


To przed zapytaniem.
AxZx
Cytat(werek @ 17.12.2007, 20:57:47 ) *
preg_match sam w sobie zwraca wartosci typu 0 lub 1 czyli false badz true, wiec dodatkowa forma bedzie raczej niepotrzebna. a nawet gdybysmy potrzebowali zeby bylo wszystko "strict" i wogole to nawet wtedy nie potrzebna jest ta negacja przed preg_match (negacja jest stosowana do typu bool!!!). poza tym regexp jest lekko nie konsekwetny "." to dowolny znak!! jezeli chciales stworzyc forme ktora przyjmowala by taka forme to wyrazenie powinno wygladac tak:


ok, idac twoim tropem mozna to zapisac tak:
  1. <?php
  2. function valid_email($str){
  3. return preg_match("/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix", $str);
  4. }
  5. ?>


i nie krzycz wiecej bo funkcja ktora podales zwraca zla wartosc - na odwrot tak jakby:P

Cytat
Jeśli mail dodajesz do bazy, powiedzmy w skrypcie rejestaracji, to rozsądnie jest zastosować coś takiego:

a ty nie nabijaj postow:) nikt nie pytal jak dodac adres email do bazy, poza tym eregi jest wolniejsze niz preg.

EDIT:
mozna jeszcze z takim wyrazeniem
  1. <?php
  2. function valid_email($email){
  3. return (bool) preg_match('/^(?!.)[-+_a-z0-9.]++(?<!.)@(?![-.])[-a-z0-9.]+(?<!.).[a-z]{2,6}$/iD', $email);
  4. }
  5. ?>
werek
Cytat(AxZx @ 17.12.2007, 20:55:57 ) *
i nie krzycz wiecej bo funkcja ktora podales zwraca zla wartosc - na odwrot tak jakby tongue.gif

tutaj fakt zlapales mnie, z pospiechu nie zamienilem pozycjami true z false (ale nie badzmi juz tak szczegolowi, mamy robic za kogos czy pomoc mu zrozumiec), poprawnie powinno wygladac tak:
  1. <?php
  2. function valid_email($str)
  3. {
  4. return (preg_match("/^[.a-z0-9_-]+@[a-z0-9-_.]+.[a-z]{2,6}$/ix", $str)) ? TRUE : FALSE;
  5. }
  6. ?>

chociaz zamiast sie tak bawic to polecalbym wykorzytsanie filtrow z zend framework'a tam walidujac email jest jeszcze sprawdzane czy dana domena istniej biggrin.gif co wedlug mnie jest o wiele lepsze
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.