Visualizzazione risultati 1 fino 9 di 9

Discussione: [PHP] Preg match lettere "particolari"

  1. #1
    Guest

    Talking [PHP] Preg match lettere "particolari"

    Salve gente..
    Utilizzo la funzione preg_match per controllare che la mia stringa contenga solo lettere o spazi e non numeri o altri simboli.
    Il codice è questo:
    Codice PHP:
    if(!preg_match("/^[ a-z]{2,20}$/i",$stringa))
    L'unico problema è che andando a modificarlo provando a rendere accettabile anche le lettere accentare e caratteri con la dieresi tipo: Ä, Ö, Ü; o per esempio la consonante ß non mi va.
    Sapreste darmi un consiglio?

    Thanks...

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Prova ad aggiungere il modificatore u.

    Citazione Originalmente inviato da php
    u (PCRE_UTF8)
    Questo modificatore attiva funzionalità di PCRE che sono incompatibili con Perl. Le stringhe di ricerca sono considerate come UTF-8. Questo modificatore è disponibile dalla versione 4.1.0 di PHP di Unix e dalla versione 4.2.3 sulla piattaforma win32. La validità UTF-8 della regola è controllata da PHP 4.3.5.

  3. #3
    Guest

    Predefinito

    Grazie per il consiglio ma ricevo questo errore:
    Compilation failed: invalid UTF-8 string at offset 6.

    ---EDIT---
    Ok, avevo dimenticato una "à" per una prova che avevo fatto precedentemente.
    Se scrivo così:
    Codice PHP:
    if(!preg_match("/^[ a-z]{2,20}$/iu",$stringa))
    Non va comunque
    Ultima modifica di mathis : 14-09-2013 alle ore 20.46.17 Motivo: Edit precedente = cavolata

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Con che codifica salvi il file php?
    Dovresti impostarla a UTF-8. Altrimenti usa la funzione utf8_encode.

    Inoltre dovresti usare la classe predefinita \w (e ci includi (escludi) i caratteri che (non) ti servono), dato che \w = [a-zA-Z_0-9]
    Codice PHP:
    $stringa = utf8_encode("cìàò");

    var_dump(preg_match("/^[ \w[^_0-9]]{2,20}$/u",$stringa));
    Ultima modifica di javascripter : 15-09-2013 alle ore 13.02.55

  5. #5
    Guest

    Predefinito

    Il file è salvato in UTF-8 ma continua a non funzionare.
    Anche utilizzando la funzione utf8_encode:
    Codice PHP:
    $stringa = utf8_encode($_POST['stringa']);
    E poi eseguendo la stampa, stampa caratteri non consoni a quelli inseriti

    ---EDIT---
    Utilizzando il preg_match nel modo che mi hai consigliato funziona, il problema è che facendo un echo mi ritorna caratteri diversi da quelli inseriti.

    ---EDIT---
    Risolto anche questa

    Thanks...

    ---EDIT(again) ---
    Adesso però non riesco ad escludere tutti i simboli ($,<,>,/,\,...) sapresti darmi qualche dritta?
    Mi da problemi anche con i numeri
    Ultima modifica di mathis : 15-09-2013 alle ore 13.41.32

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    I simboli ($,<,>,/,\,...) non vengono catturati da quell'espressione; nemmeno i numeri.
    Accetta solo lettere (minuscole e maiuscole) e/o spazi.
    Ultima modifica di javascripter : 15-09-2013 alle ore 15.56.02

  7. #7
    Guest

    Predefinito

    Io dovrei convalidare un input.
    Se il testo non contiene solo lettere dell'alfabeto e spazi mostra un errore.
    Con il codice postato inizialmente l'unico problema si presentava con le lettere accentate o con la dieresi mentre ora posso inserire anche numeri, simboli,...

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Mi sono reso conto che la regex che ho postato non funziona come speravo.
    Pertanto, approfondendo l'argomento ho trovato questa utile pagina dal manuale di php: http://www.php.net/manual/en/regexp....ce.unicode.php

    La regex che fa per te dovrebbe essere quindi:
    Codice:
    /^[\p{L} ]{2,22}$/u
    Nota che se le tue pagine html hanno la codifica utf8, non devi codificare le stringhe con la funzione utf8_encode.
    Inoltre ti consiglio di usare la funzione trim sulla stringa da controllare poiché la regex accetterebbe anche una stringa formata da soli spazi.

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Inoltre ti consiglio di usare la funzione trim sulla stringa da controllare poiché la regex accetterebbe anche una stringa formata da soli spazi.
    Si, utilizzavo già la funzione trim
    Per quanto riguarda la pagina che mi hai linkato è stata utilissima adesso sembra funzionare tutto perfettamente.

    Thanks..

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •