Non esce l'alert

Non so perchè non esce l'alert se si inserisce uno dei 3 item della reg...a me sembra a posto

if ($nome.$citta.$suoemail.$messaggio){ 

if (preg_match("/^([<>\]+)$/",$nome.$citta.$suoemail.$messaggio)){ 

$errore .= "I caratteri < > \ non sono ammessi"; 

 } 

} 

l'echo l'ho messo alla fine dei controlli e funziona

inviato 5 anni fa
php
php
6
X 0 X

Quali sono i caratteri che non devono comparire nella stringa?

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Quali sono i caratteri che non devono comparire nella stringa?

Sono le 2 parentesi a punta e la barra inversa, però ho notato che è solo la barra inversa che non viene intercettata.

Per farla intercettare ne devo mettere 3 nella reg ed inserirne 2 nell campo form, solo così esce l'alert.

risposto 5 anni fa
php
php
6
X 0 X

Dunque, se una stringa contiene "(" o ")" o "[" o "]" o "\" deve presentare errore giusto? Non c'è altro?

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Dunque, se una stringa contiene "(" o ")" o "[" o "]" o "\" deve presentare errore giusto? Non c'è altro?

Si, il problema si presenta solo con la barra inversa che non viene intercettata, a meno che non ne metto 3 nella reg e 2 nel campo form

risposto 5 anni fa
php
php
6
X 0 X

Se vuoi indicare il carattere "\" devi per forza anteporre 2 barre a questo carattere.

Con questa regex:

if( preg_match( "/\(|\)|\[|\]|\\\/" , $stringa ) ) {
    echo "Errore" . PHP_EOL;
}

dovresti ottenere l'errore ogni volta che una stringa contiene almeno uno dei caratteri citati (parentesi tone o quadre o barra invertita).

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Se vuoi indicare il carattere "\" devi per forza anteporre 2 barre a questo carattere.

Con questa regex:

if( preg_match( "/\(|\)|\[|\]|\\\/" , $stringa ) ) {
    echo "Errore" . PHP_EOL;
}

dovresti ottenere l'errore ogni volta che una stringa contiene almeno uno dei caratteri citati (parentesi tone o quadre o barra invertita).

Appunto, perchè ne devo mettere 3 nella reg e 2 nel form per far uscire l'alert? A me serve che l'alert esca anche quando si inserisce una sola barra inversa ne form

risposto 5 anni fa
php
php
6
X 0 X

Se si passa una stringa con almeno una sola barra "\" si ottiene l'errore.

Nella costruzione della regex devi inserire le 2 barre per indicare al php che tu vuoi considerare quella barra un carattere e non una funzione interna della regex (cioè la barra rovescia che indica che il carattere successivo non è un carattere speciale ma un carattere da valutare come tale, esattamente come per le parentesi tonde o quadre), La doppia barra è necessaria perché altrimenti va ad annullare il carattere di fine regex che è il "diviso", "/".

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Se si passa una stringa con almeno una sola barra "\" si ottiene l'errore.

Nella costruzione della regex devi inserire le 2 barre per indicare al php che tu vuoi considerare quella barra un carattere e non una funzione interna della regex (cioè la barra rovescia che indica che il carattere successivo non è un carattere speciale ma un carattere da valutare come tale, esattamente come per le parentesi tonde o quadre), La doppia barra è necessaria perché altrimenti va ad annullare il carattere di fine regex che è il "diviso", "/".

Va bene, ma allora come posso fare in modo che se viene inserita una sola barra inversa nel campo form esca l'alert?

risposto 5 anni fa
php
php
6
X 0 X

Al post numero 5 ti ho già dato la soluzione al problema.

Leggi attentamente le risposte!

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Al post numero 5 ti ho già dato la soluzione al problema.

Leggi attentamente le risposte!

Ho sostituito la mia con questa, ma se voglio che esca l'alert devo sempre inserire 2 barre inverse nel form...di base è come prima

if( preg_match( "/\(|\)|\[|\]|\\\/" , $nome.$citta.$suoemail.$messaggio)) {
risposto 5 anni fa
php
php
6
X 0 X

Allora controlla la configurazione del tuo php perché la regex è corretta:

$ cat test.php 
<?php
$stringa = "stringa \ con barra rovescia";

if( preg_match( "/\(|\)|\[|\]|\\\/" , $stringa ) ) {
    echo "Errore" . PHP_EOL;
}
?>
$ php test.php 
Errore

E' verosimile che hai il php configurato per eliminare le backslash dai dati in input. O forse processi in modo errato la stringa all'inizio.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Adesso funziona, if (preg_match("/[<>\\\]+/", $nome.$citta.$suoemail.$messaggio)){

avevo questo stripslashes ora sorge la domanda: farli togliere in automatico da stripslashes o far uscire l'alert?

risposto 5 anni fa
php
php
6
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda