|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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";
Come faccio ad aggiungere un OR con il formato gg-mm-aaaa ?? Ogni aiuto è apprezzato grz |
|
|
|
|
|
#2 |
|
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";
}
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
Quote:
poi sul fatto dei delimitatori, non è obbligatorio usare "/", v. qui http://us.php.net/manual/en/regexp.r...delimiters.php |
|
|
|
|
|
|
#4 |
|
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})$
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
Quote:
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* |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
Quote:
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 |
|
|
|
|
|
|
#9 | |||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
Esempio con abc$: xyzabc -> true xyzabcd -> false Quote:
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:
Esempio [abc] matcha qualsiasi cosa che sia una 'a', una 'b' o una 'c'. |
|||
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
Quote:
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})$
|
|
|
|
|
|
|
#11 |
|
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 22:13. |
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
Quote:
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})$
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:10.




















