Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-12-2010, 17:37   #1
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
[PHP] Espressioni regolari help

Suggerirei di postare gentilmente un tutorial sulle espressioni regolari in php tramite preg_match nella sezione Corsi, dato che se ne ha bisogno continuamente ma il loro utilizzo non è per niente banale
E non ho trovato guide a prova di novizio in giro.
Parlo per l'interesse di tutti ovviamente.

A parte questo, il mio problema è che non riesco a scrivere una semplice espr. reg. per matchare una data in formato gg-mm-aaaa o gg/mm/aaaa

ho provato così, ma non matcha le date corrette

Codice:
if(preg_match("%([0-9]{2})/([0-9]{2})/([0-9]{4}) | ([0-9]{2})\-([0-9]{2})\-([0-9]{4})%",$data) == 0)
 print "Data scorretta";
else 
 print "ok";
Se invece tolgo il "|" e la parte a destra , matcha correttamente le date nel formato gg/mm/aaaa.
Come faccio ad aggiungere un OR con il formato gg-mm-aaaa ??

Ogni aiuto è apprezzato
grz
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 18:06   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
l'ex regolare va messa tra /

Poi prova questa che è un pò più sofisticata (verifica anche se i numeri inseriti sono accettabili per il loro significato, nel limite del possibile)

Codice:
if(preg_match("/([0-2]*[0-9]|3[0-1])[-\/](0*[0-9]|1[0-2])[-\/]([0-9]{4})/", $data) == 0){
	print "Data scorretta";
}
else { 
	print "ok";
}
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 18:32   #3
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
Quote:
Originariamente inviato da MEMon Guarda i messaggi
l'ex regolare va messa tra /

Poi prova questa che è un pò più sofisticata (verifica anche se i numeri inseriti sono accettabili per il loro significato, nel limite del possibile)

Codice:
if(preg_match("/([0-2]*[0-9]|3[0-1])[-\/](0*[0-9]|1[0-2])[-\/]([0-9]{4})/", $data) == 0){
	print "Data scorretta";
}
else { 
	print "ok";
}
mmh, non mi convince, se gli passo $data="623fg12-12-1587gds323" il match passa,

poi sul fatto dei delimitatori, non è obbligatorio usare "/", v. qui
http://us.php.net/manual/en/regexp.r...delimiters.php
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 19:35   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ovvio che passa, quella stringa contiene una data valida.

Se la tua richiesta è "voglio matchare una stringa che sia unicamente una data" allora è diverso, basta comunque mettere ^ prima e $ dopo:

Codice:
^([0-2]*[0-9]|3[0-1])[-\/](0*[0-9]|1[0-2])[-\/]([0-9]{4})$
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 19:38   #5
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da GordonFreeman Guarda i messaggi
..

poi sul fatto dei delimitatori, non è obbligatorio usare "/", v. qui
http://us.php.net/manual/en/regexp.r...delimiters.php
Hai ragione, non funziona perchè hai sbagliato proprio la regex.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 20:08   #6
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Ovvio che passa, quella stringa contiene una data valida.

Se la tua richiesta è "voglio matchare una stringa che sia unicamente una data" allora è diverso, basta comunque mettere ^ prima e $ dopo:

Codice:
^([0-2]*[0-9]|3[0-1])[-\/](0*[0-9]|1[0-2])[-\/]([0-9]{4})$
Si la richiesta è quella

Scusa la mia noobbità in materia, ma [0-2]* non vuol dire che sono ammesse da 1 a infinite volte delle cifre 0,1,2?
Quindi anche queste che non sono date passerebbero:
000000000000000000000000000-01-2000
1111111111111111111111111111/01/2000

idem per 0*
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 20:22   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da GordonFreeman Guarda i messaggi
Si la richiesta è quella

Scusa la mia noobbità in materia, ma [0-2]* non vuol dire che sono ammesse da 1 a infinite volte delle cifre 0,1,2?
Quindi anche queste che non sono date passerebbero:
000000000000000000000000000-01-2000
1111111111111111111111111111/01/2000

idem per 0*
Si hai ragione scusami, sostituisci tutti i * con {0,1}. Inoltre se vuoi puoi pensare a come migliorarla ancora, ad esempio ora accetta anche 00 come valore, in teoria dovrebbe accettare solo 01 o 1, robe così
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 20:38   #8
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Si hai ragione scusami, sostituisci tutti i * con {0,1}. Inoltre se vuoi puoi pensare a come migliorarla ancora, ad esempio ora accetta anche 00 come valore, in teoria dovrebbe accettare solo 01 o 1, robe così
Comincio a ingranare..

poi qualche domanda:

$ serve a dire "tutta la stringa deve matchare il pattern, non solo una sottostringa"?

a cosa serve ^ ?

se nella tua espressione avessi sostituito [-\/] con [\/-] sarebbe stato lo stesso?

Scusa per le domande, se vuoi mettimi il link a un tutorial per noob come me, così me lo leggo
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 20:43   #9
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da GordonFreeman Guarda i messaggi
Comincio a ingranare..

poi qualche domanda:

$ serve a dire "tutta la stringa deve matchare il pattern, non solo una sottostringa"?
Vuol dire che quello che lo precede deve trovarsi alla fine della stringa
Esempio con abc$:
xyzabc -> true
xyzabcd -> false

Quote:
a cosa serve ^ ?
Vuol dire che quello che lo segue deve trovarsi all'inizio delle stringa
Esempio con ^abc;
abcd -> true
xyzabc -> false

Quindi ^abc$ vuol dire che abc deve essere sia l'inizio che la fine di una stringa, cioè la stringa stessa.

Quote:
se nella tua espressione avessi sostituito [-\/] con [\/-] sarebbe stato lo stesso?
Stessa cosa si, le parentesi quadre matchano ogni carattere che vi è contenuto dentro, è l'ordine non è importante perchè non fa il match di una stringa, ma di ogni carattere.
Esempio [abc] matcha qualsiasi cosa che sia una 'a', una 'b' o una 'c'.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 21:08   #10
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Vuol dire che quello che lo precede deve trovarsi alla fine della stringa
Esempio con abc$:
xyzabc -> true
xyzabcd -> false


Vuol dire che quello che lo segue deve trovarsi all'inizio delle stringa
Esempio con ^abc;
abcd -> true
xyzabc -> false

Quindi ^abc$ vuol dire che abc deve essere sia l'inizio che la fine di una stringa, cioè la stringa stessa.


Stessa cosa si, le parentesi quadre matchano ogni carattere che vi è contenuto dentro, è l'ordine non è importante perchè non fa il match di una stringa, ma di ogni carattere.
Esempio [abc] matcha qualsiasi cosa che sia una 'a', una 'b' o una 'c'.
ok dai grazie

poi ci sarebbe da dire che l'espressione matcha queste che non sono corrette:

01-01/2000
01/01-2000

perchè devono essere entrambe - o entrambe / , quindi :

Codice:
^([0-2]{1,1}[0-9]|3[0-1])[-](0{1,1}[0-9]|1[0-2])[-]([0-9]{4}) | 
  ([0-2]{1,1}[0-9]|3[0-1])[\/](0{1,1}[0-9]|1[0-2])[\/]([0-9]{4})$
a parte il fatto che i giorni non dovrebbero valere 00 , come dicevi prima..
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 21:10   #11
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Non servono le [] se ci metti un solo carattere, e scritta così non va bene perchè non controlli che sia una stringa unica, inoltre {1,1} non ha un senso pratico, puoi anche eliminarlo.

Ultima modifica di MEMon : 01-12-2010 alle 21:13.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 22:29   #12
GordonFreeman
Member
 
Iscritto dal: Apr 2005
Messaggi: 296
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Non servono le [] se ci metti un solo carattere, e scritta così non va bene perchè non controlli che sia una stringa unica, inoltre {1,1} non ha un senso pratico, puoi anche eliminarlo.
Codice:
^([0-2][0-9]|3[0-1])-(0[0-9]|1[0-2])-([0-9]{4})$ | 
^([0-2][0-9]|3[0-1])[\/](0[0-9]|1[0-2])[\/]([0-9]{4})$
la accendiamo?
GordonFreeman è offline   Rispondi citando il messaggio o parte di esso
Old 01-12-2010, 22:29   #13
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Quote:
Originariamente inviato da GordonFreeman Guarda i messaggi
Codice:
^([0-2][0-9]|3[0-1])-(0[0-9]|1[0-2])-([0-9]{4})$ | 
^([0-2][0-9]|3[0-1])[\/](0[0-9]|1[0-2])[\/]([0-9]{4})$
la accendiamo?
Pare di si
MEMon è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Ecovacs presenta la gamma 2026: paviment...
Efficienza energetica fino a 2.000 volte...
Lenovo 360: il programma di canale dell'...
Appena 10.000 qubit per rompere la critt...
Analisi dei transistor durante il funzio...
Attacco informatico a Booking.com: espos...
A quattro mesi dal divieto dei social ne...
NVIDIA GeForce RTX 5060 e 5060 Ti: in ar...
Rebellions, Arm e SK Telecom, nuova alle...
Modernizzazione delle app: Red Hat OpenS...
Nel mirino di Google c'è il back ...
PRAGMATA in bundle con GeForce RTX 5000:...
Le novità MOVA per il 2026: robot e impi...
Windows, stop all'attivazione telefonica...
ASUS porta la serie TUF nel formato Mini...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v