Espressioni regolari in Javascript (RegExp)

Documenti analoghi
Linguistica Computazionale

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Costrutti condizionali e iterativi

Introduzione al Linguaggio C

Lezione 3: Programmazione della Shell di Unix

Programmazione web lato client con JavaScript. Marco Camurri 1

Javascript. - Corso Web Design - Media Dream Academy. Stefano Gaborin

Espressioni regolari nella pratica. 1 Preliminari: sintassi delle espressioni regolari in UNIX

Introduzione al Foglio Elettronico

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

5 - Istruzioni condizionali

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

MS Access: Tutorial Tabelle, Relazioni

LabVIEW parte II. Ing. Gianfranco Miele November 3, 2010

Informatica 1. Prova di recupero 21 Settembre 2001

La rappresentazione delle informazioni

Shell Espressioni regolari

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

28/02/2014 Copyright V. Moriggia

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

Linguaggio C: introduzione

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Come ordinare facilmente i dati in un foglio di calcolo Excel definendo chiavi e parametri.

Introduzione al Python

Editor di testo. Ing. Simone Brienza. Corso di laurea magistrale in Ingegneria Elettronica

<Nome Tabella>.<attributo>

CORSO DI INFORMATICA GENERALE. Università degli Studi di Bergamo

Introduzione al Foglio Elettronico

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

La sintassi del C APPENDICE H

Linguaggi Regolari e Linguaggi Liberi

Excel come foglio di calcolo. Altri Grafici con Excel Istogrammi, grafici a torta

Corso di Linguaggi di Programmazione

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Basic: introduzione. Struttura fondamentale

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Linguaggio SQL seconda parte

Elementi di C++ di base

Le direttive del Preprocessore

La Rappresentazione dell Informazione

Corso di Informatica. Access. Struttura tabella. Tabelle - esempi 11/01/2008

Linguaggi, grammatiche, espressioni regolari

Laboratorio di Elementi di Bioinformatica

Laboratorio di Python (con Linux)

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

MICROSOFT EXCEL FORMULE E FUNZIONI

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

D B M G Il linguaggio HTML

Caratteri e stringhe

SERVIZI ANAGRAFICI MASSIVI - INTERROGAZIONE SPECIFICHE TECNICHE SERVIZIO SM1.02

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

La codifica dei caratteri di un testo

Lab. di Sistemi Operativi - Esercitazione n 2 - a.a. 2012/2013

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Caratteri e stringhe

BOZZA INTERNET del 23/12/2015. Modalità di compilazione per la trasmissione delle Comunicazioni dei dati relativi alle spese funebri

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

Analisi lessicale (scanner)

Transcript:

Espressioni regolari in Javascript (RegExp) Antonio Lioy < lioy @ polito.it > Politecnico i di Torino Dip. Automatica e Informatica (estensione di materiale preparato da Andrea S. Atzeni) Le espressioni regolari definiscono un lessico = insieme di parole lecite specificando i caratteri alfabetici (A,a) numerici (1,2,...) segni di interpunzione (. :, ;...) le sequenze ammissibili es. una sequenza di uno o più caratteri A con un formalismo compatto (metacaratteri) es. A + => le sequenze A, AA, AAA, AAAA,... Antonio Lioy - Politecnico di Torino (2009) I-1

Un po di storia termine coniato dal matematico S. Kleene ( 50) sviluppato all'interno della teoria dei linguaggi stessa potenza espressiva di macchine a stati deterministiche molto usate in ambiente Unix utilizzi tipici: formulazione di potenti ricerche testuali (es. grep) automazione di editing testuale (es. sed) Insiemi di caratteri [ ] per includere uno qualsiasi dei caratteri in parentesi possibile specificare singoli caratteri o intervalli di caratteri adiacenti (es. A-Z per indicare tutte le lettere alfabetiche maiuscole) es. [a-zabc] riconosce una qualsiasi lettera alfabetica minuscola oppure A, B, o C [^ ] per escludere uno qualsiasi dei caratteri in parentesi es. [^0-9] riconosce qualsiasi carattere non numerico Antonio Lioy - Politecnico di Torino (2009) I-2

Metacaratteri \ (cosiddetto escape ) per segnalare sequenze speciali considerare caratteri speciali come caratteri normali es. \[ cerca il carattere [ simboli speciali per identificare un carattere \d = numerico, ossia [0-9] \D = non numerico, ossia [^0-9] \s = equivalente a "spazio" (blank CR LF FF HT VT) \S = non equivalente a "spazio" \w = alfanumerico o _, ossia [a-za-z0-9_] \W = non alfanumerico o _, ossia [^a-za-z0-9_] Metacaratteri (cont) (or logico) per esprimere un alternativa tra due espressioni sintassi: regexp1 regexp2 es. "A B" riconosce sia il carattere A sia il carattere B. indica un carattere qualsiasi es. "R.E" riconosce una stringa di tre caratteri che inizi con R e termini con E, quali "RaE", "RAE" o "RiE" Antonio Lioy - Politecnico di Torino (2009) I-3

Inizio e fine stringa ^ corrisponde all'inizio della stringa sintassi: ^regexp es. "^buongiorno" riconosce buongiorno, eccomi qui! ma non Dimmi almeno buongiorno $ corrisponde alla fine della stringa sintassi: regexp$ es. "200$" riconosce "nell'anno 1200" ma non "nell'anno 2000" esempio (copia un file eliminando le righe vuote): grep v "^$" file1 > file2 Raggruppamenti ( ) per raggruppare espressioni e creare clausole complesse sintassi: (regexp1<c>regexp2) regexp2) es. "pa(ss zz)o" riconosce "passo" oppure "pazzo" {N} {Nmin,} {Nmin,Nmax} per specificare la numerosità (esatta, minima, minima e massima) sintassi: regexp{ } es. "\d{2,4}" riconosce numeri composti da almeno due cifre ed al massimo da quattro, quali 23, 655 o 4345 ma non 2 o 34567 o 2+3 Antonio Lioy - Politecnico di Torino (2009) I-4

Numero di occorrenze * indica zero o più occorrenze di un espressione sintassi: regexp* es. (ab)* riconosce sequenze di "ab" di qualsiasi lunghezza, come "ab" "abab" o anche "" + indica una o più occorrenze di un espressione sintassi: regexp+ es. (ab)+ riconosce sequenze di "ab" di qualsiasi lunghezza, come "ab" "abab" ma non ""? indica zero o al più una occorrenza sintassi: regexp? es. "Mar(i)?a" riconosce le sequenze Mara, Maria, e Mariangela ma non "Mariiiiiia!" Le espressioni regolari in Javascript possono essere create come sequenze letterali es. re = /ab+c/ valutata quando viene caricato lo script più veloce se l espressione rimane costante come costruttore dell oggetto RegExp es. re = new RegExp("ab+c") valutata a runtime attenzione al carattere backslash: re = /\d{2}/ re = new RegExp("\\d{2}") Antonio Lioy - Politecnico di Torino (2009) I-5

Flag delle regexp in JS possibile indicare dei flag quando si crea la regexp re = / pattern / flags re = new RegExp ("pattern", "flags") possibili flag: i = case-insensitive (ignora la differenza tra caratteri maiuscoli e minuscoli) g = global (non si ferma al prima match ma prosegue la ricerca su tutta la stringa) m = multiline (se la stringa contiene terminatori di linea allora ogni riga è considerata una stringa diversa ai fini dei caratteri ^ e $) esempio: re = /ciao/i Metodi JS per regexp (base) string.search( regexp ) restituisce l'indice iniziale della (prima) stringa trovata, oppure -1 regexp.test( stringa ) restituisce true se all'interno della stringa compare l'espressione, false altrimenti esempio: var s = "ciao,mamma" var re = /\W/ n = s.search(re) // restituisce 4 x = re.test(s) // restituisce true Antonio Lioy - Politecnico di Torino (2009) I-6

Metodi JS per regexp (avanzati) le espressioni regolari possono essere usate per identificare una o più sottostringhe (e cambiarle o salvarle in un array) string.match( regexp ) restituisce le stringhe trovate oppure null string.replace( regexp, new) restituisce la stringa di partenza con new al posto delle parti selezionate dall'espressione regolare string.split( regexp ) restituisce le stringhe identificate in base alla regexp regexp.exec( string ) restituisce le stringhe identificate in base alla regexp Validazione dei dati di un form function verifica(d) { var expr=/^\d{2}-\d{2}-\d{4}$/ if (expr.test(d)) window.alert(d+": formato corretto") else window.alert(d+": formato errato") } <form> data (gg-mm-aaaa) <input type="text" name="data"> <input type="button" value="verifica" onclick="verifica(data.value)"> </form> checkdata.html Antonio Lioy - Politecnico di Torino (2009) I-7

Esempio (password) possibile formato di una password: alfanumerica, minimo 8, massimo 16 caratteri almeno una maiuscola, una minuscola ed una cifra funzione che restituisca true se la pwd è corretta, false altrimenti function is_pwd_ok(p) { return ( /^[a-za-z0-9]{8,16}$/.test(p) && /[A-Z]/.test(p) && /[a-z]/.test(p) && /[0-9]/.test(p) ) } Esempio (numero naturale) numero naturale, scritto eventualmente col punto come separatore delle migliaia funzione che restituisca -1 seilformatoèerrato, errato, altrimenti il numero di partenza senza gli eventuali punti (ad esempio 21.876 deve diventare 21876) function n_naturale(x) { re = /^\d{1,3}(\.?\d{3})*$/ if (re.test(x)) return x.replace(/\./g,"") else return -1 } Antonio Lioy - Politecnico di Torino (2009) I-8

Test dei valori il test dei programmi è un'arte......ed anche una scienza testare i casi positivi... tutti se possibile (raramente) sottoinsiemi sensati (max, min,...)...ma anche quelli negativi tipi diversi, misti, valori atipici,... Antonio Lioy - Politecnico di Torino (2009) I-9