JavaScript/Espressioni regolari: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
G4 (discussione | contributi)
+ vedi anche
Ramac (discussione | contributi)
proseguo
Riga 1:
{{JavaScript}}
{{vedi anche|Espressioni regolari}}
JavaScript, oltre ai metodi già spiegati relativi all'[[JavaScript/Oggetto String|oggetto String]], offre potenti funzioni di manipolazione stringa con le '''[[w:espressioni regolari|espressioni regolari]]'''.
 
Le espressioni regolari sono un particolare linguaggio con il quale è possibile abbinare le stringhe per effettuare ricerche, sostituzioni o semplici confronti.<br/>
Ad esempio, se nei precedenti capitoli abbiamo visto come sostituire tutte le "a" in una stringa (con il metodo <code>replace</code>) dopo aver letto questo capitolo potremo sostituire tutte le parole con dei numeri, o anche semplicemente tutte le cifre con un carattere nullo.
{{vedi anche|Espressioni regolari}}
{{vedi pedia|Espressioni regolari}}
 
Le espressioni regolari di JavaScript sono molto simili a quelle del Perl. In questo capitolo tuttavia ci soffermeremo a spiegarne almeno i fondamenti.
Line 25 ⟶ 26:
 
== Sintassi delle espressioni regolari ==
L'espressione regolare più semplice che possiamo dichiarare è quella che non contiene caratteri speciali, ma il suo uso sarà abbastanza limitato. Ad esempio l'espressione regolare <code>/JavaScript/</code> abbinerà '''solo''' le stringhe "JavaScript". Per rendere le espressioni regolari invece veramente potenti, usiamo i cosidetticosiddetti caratteri speciali, che non identificano il carattere stesso, ma altri caratteri particolari o gruppi di caratteri.
 
=== Testo e punteggiatura ===
Line 42 ⟶ 43:
|-
| <tt>\S</tt> || Ogni carattere non di spazio || <tt>\S\s</tt> abbina "<tt>% </tt>", ma non <tt>%_</tt>
|-
| <tt>.</tt> || Ogni carattere singolo || <tt>.</tt> abbina <tt>b</tt> e <tt>°</tt>
|-
| <tt>[...]</tt> || Qualsiasi carattere indicato tra le parentesi || <tt>[ciao]</tt> abbina <tt>c</tt> e <tt>o</tt>, ma non <tt>b</tt>; <tt>[0-9]</tt> abbina ogni carattere tra 0 e 9 (ad esempio <tt>5</tt> ma non <tt>k</tt>)
|-
| <tt>[^...]</tt> || Qualsiasi carattere esclusi quelli indicati tra le parentesi || <tt>[^ciao]</tt> abbina <tt>b</tt> e <tt>q</tt>, ma non <tt>c</tt>; <tt>[^a-z]</tt> abbina ogni carattere che non è compreso tra la a e la z (ad esempio <tt>@</tt> ma non <tt>k</tt>)
|}
 
=== Un primo esempio ===
Vediamo un primo esempio per iniziare a capire come utilizzare in concreto le nostre espressioni regolari.
<br/>Supponiamo di voler creare un modulo per la registrazione ad un sito e chiediamo all'utente di inserire come ''username'' una parola che non contenga caratteri speciali, ma solo lettere, numeri e il simbolo di underscore.
<br/>Potrebbe venire in mente che per fare questo ci possa tornare utile il metacarattere visto in precedenza <code>\w</code>. Tuttavia questo non è possibile, in quanto <code>\w</code> abbina un ''singolo carattere non di parola'': potremmo ad esempio controllare che il nostro nome utente si abbini con <code>\w\w\w\w</code>, ma questo funzionerebbe solo con un ''username'' di quattro lettere. La cosa più comoda è quindi verificare che nella nostra stringa ci sia un carattere ''non'' di parola e, in caso ciò sia vero, chiedere all'utente di scegliere un diverso ''username''.
 
Per verificare che una regex abbini una stringa, usiamo il metodo <code>test</code> dell'oggetto RegExp che restituisce <code>true</code> se la regex si abbina, <code>false</code> in caso contrario:
<source lang=javascript>
var username = document.form.username.value; //prende il nome dal form
var myRegex = /\W/i; //non serve effettuare una ricerca globale
//in quanto se c'è anche un solo carattere non di parola l'username non è valido
 
var valido = !(myRegex.test(username));
 
if (valido) {
alert('Nome utente non valido. Riprova');
} else {
//prosegui...
}
 
</source>
 
=== Caratteri di ripetizione ===
I seguenti caratteri servono per abbinare gli elementi definiti precedentemente più volte in base a quanto indicato.
{| {{prettytable}}
! Carattere !! Abbina !! Esempio
|-
| <tt>{''n''}</tt> || Abbina l'elemento precedente ''n'' volte || <tt>\d{3}</tt> abbina <tt>223</tt> ma non <tt>04</tt>
|-
| <tt>{''n'',}</tt> || Abbina l'elemento precedente ''n'' o più volte || <tt>\w{2,}</tt> abbina <tt>ac</tt>, <tt>a4cr</tt>, <tt>a_4</tt> ma non <tt>4</tt> o <tt>d4gsz'''%'''</tt>
|-
| <tt>{''n'', ''m''}</tt> || Abbina l'elemento precedente da un minimo di ''n'' volte a un massimo di ''m'' volte || <tt>\d{3,5}</tt> abbina <tt>223</tt> , <tt>3566</tt> ma non <tt>04</tt> o <tt>692159</tt>
|-
| <tt>?</tt> || Abbina l'elemento precedente zero o una volta || <tt>ciao?</tt> abbina <tt>cia</tt> oppure <tt>ciao</tt> (il punto si riferisce solo all'ultimo carattere)
|-
| <tt>+</tt> || Abbina l'elemento precedente una o più volte || <tt>ciao+</tt> abbina <tt>ciao</tt> opppure <tt>ciaoooooo</tt>
|-
| <tt>*</tt> || Abbina l'elemento precedente zero o più volte || <tt>.*</tt> abbina qualsiasi strina (sia che sia vuota sia che contenga caratteri speciali); <tt>a*</tt> abbina una stringa vuota ma anche <tt>a</tt>, <tt>aa</tt>, ecc...
|}
 
 
[[Categoria:JavaScript|Espressioni regolari]]