[PHP] problema con preg_match

Discussione in 'PHP' iniziata da MoPa, 8 Febbraio 2018.

  1. MoPa

    MoPa Nuovo Utente

    Registrato:
    28 Marzo 2016
    Messaggi:
    16
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Buondi,
    mi sono intestardito, anche per la mia poca conoscenza (lo ammetto) su questo controllo.
    In pratica dovrei controllare che non venga inserito il trattino - né all'inizio e né alla fine della variabile "nome". E' comunque possibile, ma non obbligatorio, utilizzare un solo trattino nella variabile purchè non sia il primo e neanche l'ultimo carattere, faccio degli esempi:
    esempi corretti: sangiovanni, san-giovanni
    esempi non corretti: -sangiovanni, -sangiovanni-, san--giovanni.

    Ho fatto questa funzione ma non va, chi mi può aiutare??
    PHP:
     if(@preg_match("^-|-$",$vars["nome"]))
                {
       
    $errormsg "Il nome non può iniziare o terminare con il trattino e non può contenere 2 o più trattini";
       return 
    0;
              }
     
  2. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.859
    Mi Piace Ricevuti:
    286
    Punteggio:
    83
    Sesso:
    Maschio
    @MoPa
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag code.gif quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    box inserisci 2.png.JPG
    Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
    Grazie
    Per questa volta te lo sistemo io ma mi raccomando per il futuro
     
  3. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    Ciao,
    prova questo:

    PHP:
    "/^[a-z]+-?[a-z]+$/"
     
  4. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    PS

    PHP:
    "/^[A-Za-z]+-?[A-Za-z]+$/"
     
  5. MoPa

    MoPa Nuovo Utente

    Registrato:
    28 Marzo 2016
    Messaggi:
    16
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    non va...
    in pratica deve poter inserire tutti i caratteri, anche un solo trattino, ma non due trattini ed il trattino inserito non deve essere né il primo e né l'ultimo.
    Il tuo non prevede il controllo della presenza di un trattino né come primo e neanche come ultimo carattere e allo steso tempo si possono inserire più trattini.
     
  6. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    A me funziona, perlomeno con gli esempi che avevi postato tu. Il controllo, in realtà, c'è: il nome deve iniziare e finire con unma lettera (e non con il trattino) e può contenere zero o uno tratini (-?).
    Ti mando lo script completo

    PHP:
    <?php
    $nome 
    'sangi--ovanni';
    $pattnome "/^[a-z]+-?[a-z]+$/";
    if (!
    preg_match($pattnome$nome)) {
        echo 
    'E R R O R E';
    } else {
        echo 
    'OK';
    }
    ?>
     
  7. MoPa

    MoPa Nuovo Utente

    Registrato:
    28 Marzo 2016
    Messaggi:
    16
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    ho trovato la differenza ed il motivo per cui non mi funzionava.
    Io impostavo la funzione con: if(@preg_match....
    mentre nel tuo esempio è impostato cosi: if(!preg_match...
    mi puoi far capire quale è la differenza tra il carattere@ ed il carattere !
    Grazie
     
  8. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    ! è un operatore logico ed equivale ad un NON
    ad esempio nel confronto scritto da zorro indica "se il confronto NON è uguale a ... scrivi errore altrimento ok"
    se togli l'peratore ! ti viene restituito l'esatto contrario.

    nota
    la regex indicata ti da errore anche nel casi di 2 trattini non consegutivi (es. san-gio-vanni). Tienilo presente, dato che non lo avevi specificato come possibile errore
     
  9. MoPa

    MoPa Nuovo Utente

    Registrato:
    28 Marzo 2016
    Messaggi:
    16
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Grazie va benissimo anche se i trattini non sono consecutivi, infatti deve verificare che non sia il primo ne l'ultimo e non ci sia più di un trattino
     
  10. zorro

    zorro Utente Attivo

    Registrato:
    20 Ottobre 2014
    Messaggi:
    212
    Mi Piace Ricevuti:
    10
    Punteggio:
    18
    Sesso:
    Maschio
    Località:
    ROMA
    Infatti, non conosco esattamente il significato del simbolo @ ma il ! nega ciò che viene dopo (es. != diverso).
    In effetti sarebbe più logico levare il !, ricordandosi però di invertire i due rami deell'if, ma è un'abitudine che mi porto dietro da anni.
    Lieto comunque di esserti stato d'aiuto.

    PS Se non l'hai già fatto, guarda anche la tua ultima discussione sui CAP
     
  11. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    214
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    @ non mostra gli errori
     
  12. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    16.028
    Mi Piace Ricevuti:
    146
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    @ da non usare, gli errori si devono eliminare non nascondere
     
Sto caricando...

Condividi questa Pagina