Le espressioni regolari.



Похожие документы
Lavorare con MySQL Parte Seconda.

Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara.

File, Modifica, Visualizza, Strumenti, Messaggio

Questa guida è realizzata per spiegarvi e semplificarvi l utilizzo del nostro nuovo sito E Commerce dedicato ad Alternatori e Motorini di avviamento.

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Convertitori numerici in Excel

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

FtpZone Guida all uso

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

19. LA PROGRAMMAZIONE LATO SERVER

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Olga Scotti. Basi di Informatica. Excel

Interazione con l utente : i moduli.

Via Mazzini, Candia Canavese (TO)

TUTORIAL PUBBLICARE e INVIARE CIRCOLARI (v 1.5) -- PRIMA FASE -- PUBBLICAZIONE DI UNA CIRCOLARE (e suoi eventuali allegati)

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

Aprire, preparare un documento da utilizzare come documento principale per una stampa unione.

FtpZone Guida all uso Versione 2.1

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

GESGOLF SMS ONLINE. Manuale per l utente

LEZIONE 6. Sommario LEZIONE 6 CORSO DI COMPUTER PER SOCI CURIOSI

MANUALE EDICOLA 04.05

COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL)

PHP e MySQL. Guida scaricata da

Il foglio elettronico 5/06/2013

Guida informatica per l associazione #IDEA

Proteggiamo il PC con il Firewall di Windows Vista

4 3 4 = 4 x x x 10 0 aaa

Da:

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

Inserimento dei dati

Vi ricordiamo che per qualsiasi problema tecnico o informazione potete contattare info@eduitalia.org oppure Francesco al

1. ACCESSO AL DATABASE

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

INDICE. Accesso al Portale Pag. 2. Nuovo preventivo - Ricerca articoli. Pag. 4. Nuovo preventivo Ordine. Pag. 6. Modificare il preventivo. Pag.

Progetto di Ingegneria del Software 2. SWIMv2

Funzioni in C. Violetta Lonati

Dispense di Informatica per l ITG Valadier

Configurazione account di posta elettronica certificata per Microsoft Outlook Express

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

LA CORRISPONDENZA COMMERCIALE

L amministratore di dominio

Provincia di Livorno

Guida Microsoft Outlook Express, Creare e configurare l'account su dominio PEC generico

INTERNET EXPLORER Guida introduttiva CAPITOLO 1 Fig. 1

Introduzione alla programmazione in C

Joomla: Come installarlo e come usarlo. A cura di

CERTIFICATI DIGITALI. Manuale Utente

Software per Helpdesk

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

Guida Sintetica Portale Clienti Sportello

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

NUOVA PROCEDURA DI RESET PASSWORD AUTOMATICA

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Leggere un messaggio. Copyright 2009 Apogeo

Richiesta pagina PHP (es: index.php)

OSSERVATORIO REGIONALE CONTRATTI PUBBLICI DI LAVORI, SERVIZI E FORNITURE

COME CONFIGURARE LA PEC SU MICROSOFT OFFICE OUTLOOK 2007

La posta elettronica (mail)

<?php include './include/page.php';

Software di controllo per le denunce retributive e contributive individuali mensili - Ver.1.0

Google AdWords. Corrispondenze Parole Chiave

Strutturazione logica dei dati: i file

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Figura 1 Le Icone dei file di Excel con e senza macro.

risulta (x) = 1 se x < 0.

Guida Microsoft Outlook Express, Creare e configurare l'account su proprio dominio PEC

Programmazione Web. Laboratorio 4: PHP e MySQL

Guida all uso di Java Diagrammi ER

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Struttura di un programma Java

operazioni preliminari 1. generare il proprio sito con FCM (stagione in corso) selezionando, nelle interrogazioni, "tutti i dati" come in figura

FRANCESCO MARINO - TELECOMUNICAZIONI

per scrivere un articolo da prima pagina! per inviare una newsletter Come si crea Comunicazione Anfaa Edizione 4a.2013

Foglio di calcolo con Microsoft Excel 2003 III

Login. Gestione contenuto.

2. LOGIN E RECUPERO DATI DI ACCESSO

GUIDA ALLA PROMOZIONE SUL SITO

Informatica per la comunicazione" - lezione 13 -

CONTENT MANAGEMENT SY STEM

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

Per accedere clicca su START o AVVIO (in basso a sinistra sul tuo schermo), poi su PROGRAMMI, ACCESSORI e infine su BLOCCO NOTE.

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

1.0 GUIDA PER L UTENTE

GateManager. 1 Indice. tecnico@gate-manager.it

ISCRIZIONE GARE NUOTO ON LINE ISTRUZIONI OPERATIVE PER LE SOCIETA

Provincia di Siena UFFICIO TURISMO. Invio telematico della comunicazione dei prezzi e dei servizi: istruzioni per l uso

Iniziare con Internet Explorer. dott. Andrea Mazzini

Esercizio data base "Biblioteca"

Транскрипт:

Lezione 8 Le espressioni regolari. Le espressioni regolari. Corrispondenze e classi di caratteri. Le regular expressions (espressioni regolari) servono per descrivere dei modelli di stringa. E possibile verificare, ad esempio, se un codice fiscale o un indirizzo email sono stati inseriti correttamente. Infatti, le funzioni viste la volta scorsa non sono molto flessibile e potenti come lo strumento che vedremo in questa lezione. E bene dire però, che l uso delle espressioni regolari porta un sensibile overhead di esecuzione; quindi, dove è possibile usare le funzioni dedicate alle stringhe è inutile utilizzare le espressioni regolari, che portano un aumento del tempo di esecuzione. PHP supporta sia le espressioni regolari che seguono lo standard POSIX sia quelle stile Perl (Perl regular expressions). Noi ci occuperemo del primo gruppo. Daremo comunque un cenno anche alle espressioni regolari Perl, più complicate da apprendere ma anche più potenti. Corrispondenze e classi di caratteri. Con la funzione ereg() si possono intercettare le corrispondenze di modelli nelle stringhe. La sintassi della funzione è la seguente : Sintassi: $res = ereg( modello,$stringa,$array); La funzione ereg() restituisce il numero di caratteri trovati nelle corrispondenze e memorizza in $array le corrispondenze trovate nella variabile $stringa, in base al modello usato. La difficoltà nell uso delle espressioni regolari sta proprio nel capire la sintassi dei modelli. Essi possono essere semplici caratteri, contenere quantificatori, classi di caratteri. Ad esempio : $num=ereg( gio, ciao Gigio,$array); print $num. ---.$array[0]; L output sarà 3---gio. Per apprezzare però le qualità delle regular expressions si osservi attentamente la seguente tabella : Simbolo Funzione Esempio. Qualsiasi carattere g. successivo.? Nessuna o una istanza del g? carattere. * Nessuna o più istanze del g* carattere. + Una o più istanze. g+ n Esattamente n istanze g2 successive del carattere. n, n o più istanze. g2,,n Al massimo n istanze. g,3 n,m Trova le corrispondenze g2,3 con almeno n istanze ma

Corrispondenze e classi di caratteri. al massimo m istanze. Prima di far vedere qualche esempio utile, bisogna parlare delle classi di caratteri. Le classi permettono di trovare le corrispondenze di un carattere appartenente ad una determinata classe, come un numero, un carattere alfabetico e così via. Nella tabella sono riportati esempi di classi : Classe Descrizione Esempio [a-z] Trova tutti i caratteri minuscoli. [a-z]4 : Trova un gruppo di 4 caratteri minuscoli. [A-Z] Trova i caratteri maiuscoli. [A-Z]+ : Trova una o più istanze di un carattere maiuscolo. [0-9] Trova un numero. [0-9]5 : Trova un gruppo di 5 numeri (ad esempio un CAP). [^0-9] Trova tutto ciò che è diverso da un numero. [^0-9]* : Trova tutto ciò che non è un numero. Parliamo ora di atomi. Racchiudendo fra parentesi un modello e sfruttando i simboli quantificatori visti nella prima tabella, è possibile formulare complesse espressioni regolari. A titolo di esempio, riportiamo vari blocchi di codice per controllare, ad esempio, dei dati ricevuti dall utente tramite un form HTML (parleremo più avanti nel corso come inviare dati ad uno script PHP tramite i form) : if ((empty($nominativo)) (ereg("[^a-za-z\ ]+",$nominativo,$array))) print $nominativo. Non è un dato corretto ; Come vedete, se la variabile $nominativo è vuota o all interno sono stati trovate una o più corrispondenze di caratteri non alfabetici (compreso lo spazio), viene segnalato un messaggio di errore. if ((empty($email)) (!ereg("([a-za-z0-9\.]+)(@1)([a-za-z0-9]2,)\.([a-za-z0-9]2,)",$email,$array)) (ereg("([\ \<\>\\\/]+)",$email,$array))) print $email. Non è un indirizzo corretto ; Non spaventatevi!;) L istruzione if precedente dovrebbe essere scritta su una sola riga. Analizziamo con calma l espressione booleana. Se $email è vuota oppure è diversa dal modello descritto in ereg(), viene segnalato errore. Il modello può essere spiegato semplicemente nel seguente modo : il primo atomo verifica una o più occorrenze di caratteri alfanumerici, compreso il punto (si noti il carattere di escape \ davanti al punto, per evitare che ci sia ambiguità con il carattere di controllo visto prima). Il secondo atomo si accerta della presenza di un unica occorrenza del carattere @. Il terzo atomo e quarto atomo verificano la presenza di almeno 2 occorrenze di caratteri alfanumerici, seguiti da un punto,e seguiti ancora da almeno 2 caratteri alfanumerici.

Lezione 8 Le espressioni regolari. Manipolazione di stringhe tramite le RE. La seconda chiamata ad ereg() serve per controllare che non siano presenti caratteri strani del tipo <,>,\,,/ (tutti preceduti da caratteri di escape), per evitare manovre strane da utenti maliziosi. Questa purtroppo non è la sede adatta per parlare di problemi di sicurezza, ma vi consiglio caldamente di approfondire l argomento se volete intraprendere la carriera del programmatore web professionista. Non avete idea di quanti portali (del valore anche di centinaia di milioni) sono vulnerabili non per via del software utilizzato, come un particolare server web, ma per colpa di una cattiva programmazione o gestione del sito (su molti siti è possibile visualizzare user e password di connessione al database in chiaro, e la cosa grave è che alcuni utilizzano le stesse password sia per accedere alle cartelle del sito via ftp che per connettersi al database!!!). Adesso un altro esempio utile : if ((empty($codice)) (!ereg("([a-za-z])6([0-9])2([a-za-z])1([0-9])2([aza-z])1([0-9])3([a-za-z])1",$codice,$array))) print $codice. Non è un codice fiscale corretto ; Conoscendo la struttura di un codice fiscale, è possibile scrivere un semplice modello per un espressione regolare che verifichi la correttezza di questo dato. Infatti, un corretto codice fiscale può essere MDNTMS68C23E101W. Come potete osservare, l espressione regolare rispecchia fedelmente la struttura, cioè prima sei caratteri alfabetici, poi due cifre decimali etc. etc. Manipolazione di stringhe tramite le RE. Una funzione molto utile è la ereg_replace(), per sostituire modelli nelle stringhe. L unica differenza con ereg(), è il fatto che ereg_replace(), oltre a trovare le corrispondenze, effettua anche una sostituzione, ritornando la stringa manipolata : Sintassi: $stringa_res=ereg_replace(modello,replacement,$stringa); Tralasciando il semplice esempio di sostituzione di stringa (effettuabile più efficacemente con la funzione str_replace() vista nella scorsa lezione), introduciamo anche l uso dei riferimenti all indietro con ereg_replace(). Si racchiudono tra parentesi i singoli elementi di espressione regolare. Nel replacement, ognuno di essi sarà identificato da un numero intero di sequenza. Ad ogni atomo di espressione regolare, è possibile applicare una diversa sostituzione. Presentiamo un esempio classico: convertiamo una data in formato mm/gg/aaaa in gg/mm/aaaa : $date=02/28/2002; $data=ereg_replace( ([0-9]+)/([0-9]+)/ ([0-9]+),\\2/\\1/\\3,$date); $data conterrà la stringa 28/02/2002.

Un cenno alle espressioni regolari Perl. Un cenno alle espressioni regolari Perl. Le espressioni regolari Perl possono tornare utili in alcuni casi. Parleremo brevemente delle PCRE dando giusto qualche esempio e qualche spunto da cui poter studiare in seguito. Una PCRE viene racchiusa dai delimitatori /. La funzione simile alla ereg() vista prima è la preg_match() : $testo= Antongianni ; if ((preg_match( /i.n/,$testo,$array) ) print $array[0]; //stampa ian Se utilizziamo invece la /i.*n/ viene stampato iann (* significa quanti più caratteri è possibile prima della n). Usando /i.?n/ (? = quanti meno caratteri è possibile prima di una n), viene stampato di nuovo ian. Tramite preg_match_all() è possibile memorizzare in $array tutte le occorrenze trovate (mentre con le POSIX RE ciò non è possibile in maniera immediata). Tramite la funzione preg_replace(), è possibile impostare dei parametri per permettere la sostituzione non di tutte le occorrenze (come avviene per la ereg_replace()), ma un numero prefissato di occorrenze. Immaginiamo di voler analizzare l url da cui proviene un utente, prelevando soltanto il dominio principale (cioè da http://www.dominio.com/sottocartella/votami.php vogliamo soltanto analizzare http://www.dominio.com ). Infatti, in un sistema di votazione, vogliamo controllare che il voto provenga da un determinato dominio inserito in un database. Ma se nel database l utente ha inserito un indirizzo del tipo http://www.dominio.com/sottocartella/votami.php, ma vuole permettere anche la votazione dalle altre pagine del sito, bisogna verificare soltanto la presenza del dominio principale e non dell url esatto da cui proviene il voto. $siteurl= http://www.dominio.com/sottocartella/votami.php ; if ($test=substr($siteurl,-1)<>'/') $siteurl.='/'; //aggiunge / serve per la preg_match preg_match("/h.*?\/\/.*?\//",$siteurl,$array); $dominio=$array[0]; //inserisce soltanto il dominio base if (strstr($http_referer,$dominio)) print ok, voto valido perchè proveniente dal dominio registrato ; La preg_match() preleva tutto ciò che inizia con h fino alla terza occorrenza di una barra inversa (/). Quindi, nel nostro esempio, $dominio conterrà la stringa http://www.dominio.com/. $HTTP_REFERER è una variabile globale che contiene l indirizzo di provenienza (ad esempio http://www.dominio.com/altracartella/votamiancora.php ). Tramite la funzione strstr() viene verificata la presenza della sottostringa $dominio all interno dell url di provenienza.

Lezione 8 Le espressioni regolari. Un cenno alle espressioni regolari Perl. Anche per questa volta è tutto. Nella prossima lezione parleremo delle funzioni PHP dedicate ai files. Non mancate!! 2002 By Domenico Nappo aka WebdoM. L autore declina ogni responsabilità per eventuali (quanto improbabili) danni recati al sistema per l uso degli script di esempio riportati in questa guida.