Visualizzazione risultati 1 fino 9 di 9

Discussione: ereg, espressioni regolari con variabili nel controllo

  1. #1
    Guest

    Predefinito ereg, espressioni regolari con variabili nel controllo

    Eccomi con l'enensimo problema

    Però sto cercando di migliorare il mio sitarello e di renderlo più sicuro.

    Ora, ho questo script:
    Codice PHP:
    $ext = array('.prova', '.prova_2');

    if(!
    eregi('^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)' . in_array($ext) . '$', $email)
    {
    print
    'Errore';
    }
    else
    {
    print
    'OK!';
    }
    Dovrebbe controllare le email, che il valore dopo @dominio. sia nell'array altrimenti restituisce errore.

    Quindi se ho @sito.estensione viene restituito Errore altrimenti, se per esempio è @dominio.prova, stampi OK!

    Non so come risolvere questo problema pechè di espessioni regolari ne so poco e nulla

  2. #2
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    cercando su google trovi questo

    Codice PHP:
    $email = "mail@mail.it";

    function
    ControlloEmail($email){
    $result = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$email);
    if(
    $result == false){
    return
    false;
    }else{
    return
    true;
    }
    }
    richiami la funzione

    Codice PHP:
    if(ControlloEmail($email)) {
    echo
    "controllo effettuato";
    } else {
    echo
    "mail errata";
    }

  3. #3
    Guest

    Predefinito

    1. Non voglio utilizzare funzioni perchè lo script che ho postato è una parte, ci sono tanti altri controlli e vorrei evitare.
    2. Non voglio qualcosa di pronto, non voglio aggirare il problema ma cercare di risolverlo, le cose fai date danno più soddisfazione.
    3. Non cambia niente dal codice che avevo. Devo controllare che l'estensione del dominio sia nell'array altrimenti mostrare errore.

    Grazie lo stesso

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    la soluzione nel post sopra è inutile, non risponde alla domanda.

    biccheddu, il tuo codice in cima non può funzionare, perché la funzione in_array viene eseguita, ritorna vero o falso, e vero o falso viene inserito nella stringa dell'espressione regolare, che poi viene valutata. Ed un'espressione regolare con scritto a metà true o false non controlla che l'email appartenga ad un dominio, devi farlo tu a parte. Con ereg_match() puoi farti restituire la parte dell'indirizzo che rappresenta il dominio, e poi confrontare quella con i nomi che vuoi accettare.

  5. #5
    Guest

    Predefinito

    non ho capito quello che intendi dreadnaut

    Potresti postare un piccolo esempio? Grazie ^^'

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    mio errore, intendevo preg_match(), che ti ritorna il contenuto di ogni "parentesi" definita nella tua espressione. Prova a stampare con i match che ti ritorna una chiamata a preg_match print_r(), e vedrai cosa intendo. Trovi un sacco di esempi nella pagina del manuale online dedicata alla funzione!

    Se stai usando php5, sfrutta anche filter_var() per verificare che l'indirizzo sia corretto.

  7. #7
    Guest

    Predefinito

    il problema è che con gli esempi mi restituiscono errori:
    Codice:
    Warning: preg_match() expects parameter 1 to be string, array given in D:\xampp\htdocs\sito\index.php on line 27
    mi sa che mollo e lascio tutto così

  8. #8
    Guest

    Predefinito

    Prova con:
    Codice PHP:
    preg_match("([A-Za-z0-9_-]+)(@[a-z0-9]+)(\.[a-z]{2,4})",$email, $r);
    In questo modo dovresti avere:
    in $r[0]il testo intero
    in $r[1] la prima parentesi
    in $r[2] la seconda
    in $r[3] la terza
    ti basta verificare con in_array() la parentesi che ti interessa

  9. #9
    Guest

    Predefinito

    Codice PHP:
    $email_name = htmlspecialchars(trim(str_replace(' ', '', $_POST['email_name'])));
    $email_domain = htmlspecialchars(trim(str_replace(' ', '', $_POST['email_domain'])));
    $email_extension = htmlspecialchars(trim(str_replace(' ', '', $_POST['email_extension'])));
    $email = $email_name . '@' . $email_domain . '.' . $email_extension;

    $extensions = array('.prova', '.prova_2');

    $ename = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';
    $edomain = '([a-z]([-a-z0-9]*[a-z0-9]+)?)';
    $eextension = '([a-z])';

    $regex = '^' . $ename . '+' .
    '(\.' . $ename . '+)*'.
    '@'.
    '(' . $edomain . '{1,63})+'.
    '.'.
    $eextension . '{2,3}'.
    '$';

    if((!
    eregi($regex, $email)) || (!in_array($email_extension, $extensions)))
    {
    print
    'ERROR';
    }
    else
    {
    print
    'OK!';
    }
    Risolto con questo script, grazie ancora
    Ultima modifica di biccheddu : 11-02-2009 alle ore 19.54.40 Motivo: Risolto con lo script postato sopra.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •