- Home
- Categorie
- Coding e Sistemistica
- Coding
- Regex e controllo Stringa
-
Regex e controllo Stringa
Salve
,
Sto utilizzando una funzione che controlli i campi di un form e sono un pò in difficoltà non sapendole usare molto bene.
Ho già agguantato dalla rete quelle per il CAP, l'Email e via scorrendo ma mi manca una in particolare (e piuttosto semplice direi).Ho un campo che deve:
- permettere numeri, lettere, spazi bianchi
- NON DEVE permettere un numero massimo di caratteri superiori al 50 e inferiori all'1
Insomma è molto semplice poichè nello specifico mi deve controllare , durante una registrazione, che il nome della struttura ricettiva-turistica non superi i 50 caratteri.
Tutto funziona in una regex che ho inserito ma il problema sorge quando inserisco questi famosi spazi bianchi. La regex fallisce e mi da campo errato:
La regex in questione è la seguente:
/^\w{1,50}$/ ```Cosa devo aggiungere? Grazie
-
Prova con
/^[a-zA-Z0-9 ]{1,50}$/
-
Testato e funzionante grazie!
-
Ok,
adesso se alla stessa regexp voglio aggiungerci anche lo slash ( / ) ?
-
Eh allora devi stare attento perchè abbiamo adottato proprio lo slash come delimitatore!

Usa # ( per esempio ) come delimitatore ed aggiungi lo slash nella classe ( le parentesi quadre ).
Praticamente quella regex cerca per una successione di caratteri appartenenti a quella data classe ( ovvero lettere minuscole, maiuscole, numeri e spazi ) fino ad un tot di 50 caratteri. Naturalmente completano il lavoro il ^ ed il $ che determinano inizio e fine riga, impostando proprio che 50 sia il massimo.
Avessimo saltato anche uno solo tra ^ o $, allora il limite di 50 non ti sarebbe servito a nulla, perchè anche se ne avevi 100 di caratteri, ti avrebbe valutato i primi ( o gli ultimi ) 50!
Prego comunque

-
Grazie Pater per tutto ha funzionato!
Ora ho un problema:Ho provato ad inserire un nome accentato (es. Olè) ma il risultato è stato negativo una volta passato alla preg_match di php con la regexp sopracitata.
Come posso fare?
Se può aiutare tieni presente che utilizza il comando:
htmlSpecialChars($valore);Quindi tutto ciò che è accentato diviene inevitabilmente un
- à = à
- è = è
Quindi deduco mi basterebbe: 1 inserire l'accentato classico (à) + il valore &
Grazie in anticipo
-
se passi per l'htmlspecialchars allora la tua regex deve includere & e ;
/^[&;a-zA-Z0-9 ]{1,50}$/edit:
Solo che ovviamente ogni carattere accentato diventerà più caratteri, mandando alle ortiche il controllo sul numero di caratteri.
Inoltre verranno permessi caratteri come " e non credo tu lo voglia.
Per risolvere dovresti utilizzare la regex prima di passarla con htmlspecialchars
-
Ok adesso provo, ti ringrazio per la dritta

Adesso ne ho un'altra:
Regegular Expression per il prezzo:/\d[\d\,\.]+/L'ho trovata sulla rete però questa mi convalida anche un valore con l'aggiunta della tipologia di moneta (?, $, Y di yen)
Volevo togliere questa evenienza essendo nel mio caso un campo che necessita unicamente del numero (al quale poi giù aggiungerò io il tipo di valore). L'unicosa eccezione da lasciare è l'uso della punteggiatura (100.00 o 25,00)
Grazie in anticipo!
-
Quella regexp dovrebbe convalidarti anche "ciao100.23?", perché non dice che è valida se trova all'interno della stringa solo un pattern numerico.
prova se questa ti funziona come vorresti:
/^\d[\d,.]+$/ho aggiunto i delimitatori di inizio e fine stringa