Problema con funzione preg_match() per controllo email

  • Creatore Discussione Creatore Discussione donot85
  • Data di inizio Data di inizio

donot85

Nuovo Utente
25 Ott 2012
4
0
0
Buongiorno ragazzi,
Ho scritto una banale funzione per controllare se una stringa inserita attraverso un form , corrisponde al formato di un indirizzo email.. Il problema è che mi restituisce sempre FALSE. Anche quando la stringa soddisfa i requisiti dell'espressione regolare che ho usato come $pattern..
il codice del form:
HTML:
<form action="register.php" method="POST" id="register">
    username:<br/>
    <input type="text" name="username" maxlength="20" id="name" class="input_form ui-corner-all"><br /><br />
    email:<br/>
    <input type="text" name="email" maxlength="60" class="input_form ui-corner-all" id="email"><br /><br />
    password:<br />
    <input type="password" name="password" maxlength="20" class="input_form ui-corner-all" id="password"><br /><br />
    ripeti password:<br/>
    <input type="password" name="password" maxlength="20" class="input_form ui-corner-all" id="password2"><br /><br />
    <input type="submit" name="submit" value="registrati" class="button ui-corner-all ui-state-default">
</form>

nel file register.php semplicemente istanzio l'oggetto della classe , e faccio partire la funzione per l'inserimento utente:
PHP:
 <?php

include_once 'lib/newuser.class.php';
$obj = new NewUser();

if(isset($_POST['submit'])) {
    $obj->AddUser();
    die;
}

if(isset($_POST['key'])) {
    $obj->VerifyUser();
    die;
}

if(isset($_POST['login'])) {
    $obj->VerifyLogin();
    die;
}

?>

infine la classe NewUser() :
PHP:
//la funzione AddUser() rimanda alla funzione per il controllo degli errori ErrorReport()
public function AddUser() {
        $this->ErrorReport();
    }
protected function ErrorReport() {
        if($this->IsEmptyField()) {
            $this->ErrorResult(1);
        }
        
        if($this->VerifyPassword()) {
            $this->ErrorResult(2);
        }
        
        if($this->UsernameExists()) {
            $this->ErrorResult(3);
        }
        
        if($this->EmailExists()) {
            $this->ErrorResult(4);
        }
        
        if(!$this->VerifyEmail()) {
            $this->ErrorResult(5);
        }
        
        $this->InsertNewUser();
    }
    
    public function ErrorResult($num) {
        header("Location: subscription.php?alert=" .$num);
        die;
    }

// infine ecco la funzione che mi sta dando problemi

protected function VerifyEmail() {
        $pattern = "^([a-zA-Z0-9])+([a-zA-Z0-9]+[-_\.]?)*([a-zA-Z0-9])+(@)([a-zA-Z0-9])+([a-zA-Z0-9]+[-_\.]?)*([a-zA-Z0-9])+(\.[a-z]{2,4})$";
        
        if(preg_match($pattern,$_POST['email'])) {
            return TRUE;
        }
        else {
            return FALSE;
        }
    }

Se ad esempio inserisco [email protected] mi restituisce FALSE.
Magari sto utilizzando un espressione regolare sbagliata? Qualche idea? Sto diventando scemo.

Grazie in anticipo e buon proseguimento di giornata :)
 
ciao
per validare un indirizzo email usa

PHP:
$email=filter_var($email, FILTER_VALIDATE_EMAIL);
da bool FALSE se l'email non sintatticamente corretta, è molto più comoda di preg_match
 
ciao
per validare un indirizzo email usa

PHP:
$email=filter_var($email, FILTER_VALIDATE_EMAIL);
da bool FALSE se l'email non sintatticamente corretta, è molto più comoda di preg_match

Grazie Borgo,
non conoscevo questa funzione e lo script adesso fa il suo dovere senza problemi :)
Saluti
 

Discussioni simili