[PHP] problema con preg_match

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;
          }
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.182
312
83
@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
 

MoPa

Nuovo Utente
28 Mar 2016
16
0
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.
 

zorro

Utente Attivo
20 Ott 2014
234
10
18
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';
}
?>
 

MoPa

Nuovo Utente
28 Mar 2016
16
0
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
 

mr.x

Utente Attivo
9 Apr 2016
250
25
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
 

MoPa

Nuovo Utente
28 Mar 2016
16
0
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
 

zorro

Utente Attivo
20 Ott 2014
234
10
18
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