[PHP] problema con preg_match

  • Creatore Discussione Creatore Discussione MoPa
  • Data di inizio Data di inizio

MoPa

Nuovo Utente
28 Mar 2016
16
0
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;
          }
 
@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
 
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.
 
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';
}
?>
 
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
 
! è 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
 
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
 
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
 

Discussioni simili