Espressione Regolare per verifica stringa

  • Creatore Discussione Creatore Discussione andreto
  • Data di inizio Data di inizio

andreto

Utente Attivo
5 Dic 2012
88
0
0
Ciao a tutti,
sto scrivendo un'espressione regolare che deve rispettare queste caratteristiche:

SI: cifre (0-9), lettere (a-z) e trattino (-).
NO: iniziare o terminare con il trattino (-).

io ho scritto:

Codice:
preg_match ('/^[^\-][a-z0-9\-]+[^\-]$/', $sito)

però ho un problema che non riesco a risolvere.

Se scrivo una stringa con meno di 3 caratteri va in errore.
Se al primo posto o all'ultimo scrivo caratteri diversi da quelli consentiti mi accetta la stringa

Io vorrei anche scrivendo solo "a" o solo "1" che non vada in errore.
Allo stesso tempo se scrivo ad esempio "£1£" deve andare in errore.

Evidentemente l'espressione si aspetta 3 caratteri e nel primo e l'ultimo posto si aspetta comunque un carattere l'importante che non sia un trattino.

Spero in un vostro aiuto, grazie.

Andrea
 
Ciao, prova con questa espressione regolare:
PHP:
preg_match ('/^[^-][a-z0-9-]+[^-]$/', $sito);
:byebye:
 
Grazie marty89 ma anche così non funziona.
Ho l'impressione che per ogni classe [ ] lui si aspetta un carattere.
Quindi vuole almeno 3 caratteri.

La mia stringa dovrebbe risultare ok anche con un solo carattere, l'importante che non inizi e non termini con il trattino.

I caratteri ammessi sono:
lettere minuscole
numeri
trattino (non al primo o ultimo posto)

Ad esempio:

--- falso
-1- falso
1-1 vero
--b falso
5-- falso
1 vero
a5 vero
A falso

abcdhr7d8- falso
-jchf66okfn falso
jfndfk---df73478 vero
ajdhfoicncdAkdfhjdf falso

Ragazzi per favore, non riesco a risolverla.
 
Forse mi sto avvicinando ma ancora c'è un errore.

Codice:
preg_match('/^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/', $sito)

unico problema che vuole almeno 2 caratteri. :dipser:
 
Ciao, cosi dovrebbe andare
PHP:
preg_match('/^[a-z0-9]{1}[a-z0-9-]*(?<=[a-z0-9])$/', $sito);
 
Sicuramente userò il tuo metodo, ma mentre mi rispondevi provavo altre soluzioni e questa sembra funzionare correttamente però è un po' più lunga:

Codice:
preg_match('/^[a-z0-9]$/', $sito) | preg_match('/^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/', $sito)

infatti avrei voluto non ripetere il preg_match ma fare circa così:

Codice:
preg_match('/^[a-z0-9]$ | ^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/', $sito)

ovviamente non funziona!

C'è un modo per inserire un or tra le due? ^[a-z0-9]$ or ^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$
 
Sicuramente userò il tuo metodo, ma mentre mi rispondevi provavo altre soluzioni e questa sembra funzionare correttamente però è un po' più lunga:

Codice:
preg_match('/^[a-z0-9]$/', $sito) | preg_match('/^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/', $sito)

infatti avrei voluto non ripetere il preg_match ma fare circa così:

Codice:
preg_match('/^[a-z0-9]$ | ^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$/', $sito)

ovviamente non funziona!

C'è un modo per inserire un or tra le due? ^[a-z0-9]$ or ^[a-z0-9]+[a-z0-9-]*[a-z0-9]+$
Prova applicandolo cosi
PHP:
preg_match('/^([a-z0-9]|[a-z0-9]+[a-z0-9-]*[a-z0-9]+)$/', $sito);
 
Ultima modifica:
Ciao :D

Ho un problema in lettura con l'uso del preg_match.

se ho ad esempio la stringa ' 2. cane,' in che modo posso leggere solo la parola cane con la preg?
 
Ciao :D

Ho un problema in lettura con l'uso del preg_match.

se ho ad esempio la stringa ' 2. cane,' in che modo posso leggere solo la parola cane con la preg?
Se ti serve solo per una parola, puoi fare cosi
PHP:
$st = '.2 cane';
echo preg_filter('/[^a-z]/','',$st);
 

Discussioni simili