Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2

    [Noob question :)] Problema Espressione Regolare

    Innanzittutto un saluto a tutti da un nuovo arrivato. :P

    Mi sono da poco affacciato al mondo del php e mi sto invero appassionando. Sto studiando da un testo di Kevin Yank e dopo aver visto qualcosina riguardo le funzioni di query su SQL mi sono imbattutto nelle "Espressioni Regolari". Il mio problema sta nel fatto che ho provato a costruire un semplice script php che effettuasse un controllo di validità "grammaticale" di un ipotetico indirizzo email sfruttando per l'appunto la funzione ereg e un'espressione regolare. Fatto sta che dopo innumerevoli test il " - " (tek) sebbene sia presente nell'espressione non viene riconosciuto come valido all'interno della funzione e non capisco il perché... So che quel segno ha un valore speciale all'interno delle espressioni e so anche che bisogna utilizzare un backslash per portarlo al significato "letterale", e così ho fatto ma non funziona lo stesso...
    In tutti gli altri casi (es xxx_yy.y[AT]server.it oppure xxx.y_y_y[AT]server.it) sembra funzionare.

    Posto di seguito il codice: sia chiaro che è un qualcosa che ho scritto per puro spirito auto-didattico (quindi sorvolate sull'effettiva utilità o funzionalità del codice :P).

    codice:
    <?php  /**  * @author ggxphp  * @copyright 2009  */  
    if (!isset($_POST['c'])):  ?>  
    
    
    
    Questo script php serve per verificare la
    
    validità di un indirizzo email tramite l'uso
    
    delle Espressioni Regolari</p>
    
    
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    Inserisci l'indirizzo email da verificare:
    <input type="text" name="c" size="30"><input type="submit" value="Verifica"></form></p> 
    
    <?php else:  	
    
    $email=$_POST['c'];
    $selfpage=$_SERVER['PHP_SELF'];
    
    if (ereg('^([a-zA-Z0-9]+[a-zA-Z0-9\-_\.]*)[@]{1}([a-zA-Z0-9\-_]+)[\.]{1}([a-zA-Z]{2,4})$', $email, $req)) 
    {
    echo "
    
    L'indirizzo email $email inserito E' VALIDO ed è così composto:</p>".
    "
    
    <ul>[*]Nome utente: $req[1]". 			
    "[*]Server: $req[2]". 			
    "[*]Dominio: $req[3][/list]</p>". 			
    "Invia email
    ". 			
    "Torna alla pagina di controllo"; 	
    } else { 		
    echo "
    
    L'indirizzo email $email inserito <u>NON</u> E' VALIDO</p>". 			
    "Torna alla pagina di controllo"; 	
    }  
    endif; 
    ?>

  2. #2
    Allora innanzitutto non usare ereg (obsolete) e usa le Perl Compatible Regular Expressions (preg_match, preg_replace).

    Poi all'interno di una character class (le parentesi quadre) il trattino ha si un significato particolare, ma se lo vuoi usare letteralmente non lo devi precedere con un backslash ma lo devi mettere come primo o come ultimo carattere, es: [-A-Z0-9]

    Neanche il punto va quotato con un backslash se e' all'interno di una character class.

    Poi, roba come [@]{1} si scrive semplicemente @, idem per il punto [\.]{1} -> \.

    Se vuoi abbreviare, invece di [A-Za-z] puoi scrivere solo [a-z] usando il modificatore 'i' (case insensitive) delle preg (vedi manuale di preg_match e funzioni simili).

    Per informazioni dettagliate sulle regexp, vai su www.regular-espressions.info

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    2
    K.b grazie per la risposta e per le preziose informazioni.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.