• Super User

    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

  • Super User

    Prova con

    /^[a-zA-Z0-9 ]{1,50}$/


  • Super User

    Testato e funzionante grazie!


  • Super User

    Ok,
    adesso se alla stessa regexp voglio aggiungerci anche lo slash ( / ) ?


  • Super User

    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 🙂


  • Super User

    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


  • User Attivo

    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


  • Super User

    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!


  • User Attivo

    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