Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762

    [ preg_match() ] Caratteri speciali non matchati correttamente. Chiarimenti.

    Buongiorno e buon pomeriggio a tutti,

    sto realizzando un if che effettui il controllo dei caratteri inseriti in un <input type="text" /> attraverso la funzione preg_match() .

    Sto notando però che alcuni caratteri, pur essendo presenti nella regEx, non vengono presi in considerazione. E quindi, in caso di TRUE , l'if non restituisce il messaggio di errore.


    Vi illustro il codice:
    Codice PHP:
    <?php

    $str 
    $_POST['string'];

    if (
    preg_match('/[|-<>]+/'$str)) {

    /* Come potete vedere, ho inserito pochi caratteri speciali. Mi sono fermato ai caratteri "<" 
     * e ">" perchè sono questi a non essere bloccati dalla regEx. I caratteri "|" e "-" invece, se 
     * presenti 1 o più volte, vengono riconosciuti e lo script riporta correttamente il messaggio
     * di errore. */

      
    echo "Errore";

    } else { 

       
    # ..resto delle operazioni.

    }

    Non capisco perchè.

    Nello specifico vorrei evitare l'inserimento dei seguenti caratteri: - / \ _ [ ] < > { } = ^ + * % & $ # @



    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230

    Re: [ preg_match() ] Caratteri speciali non matchati correttamente. Chiarimenti.

    l'espressione sembra corretta. Vabbe', manca un \ prima di - , ma immagino l'abbia segato il forum quando hai postato.

    Quindi fai un var_dump($str) subito prima dell'if, e vedi se effettivamente hai quei caratteri all'interno. Magari c'e' un filtro sopra che applica htmlentities e trasforma <> in &lt;&gt; o una trasformazione del browser, o qualche altra cosa del genere.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762


    Non avevo inserito il carattere \ prima di - effettivamente.

    Ora che l'ho inserito ed ho inserito all'interno della preg_match anche i caratteri < e > ...mi riporta correttamente il messaggio di errore.

    Ora provo ad inserire gli altri caratteri speciali.

  4. #4
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da wartpro


    Non avevo inserito il carattere \ prima di - effettivamente.

    Ora che l'ho inserito ed ho inserito all'interno della preg_match anche i caratteri < e > ...mi riporta correttamente il messaggio di errore.

    Ora provo ad inserire gli altri caratteri speciali.
    in questo caso doveva darti errore di sintassi... magari dai un'occhiata al file di log la prossima volta

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Nessun file di log risalente alle 16:41

    Se il file di log a cui ti stai riferendo e quello agli errori di Apache (EasyPhp)

  6. #6
    Mettere il - senza il backslash prima non e' un errore di sintassi, semplicemente indica un range di caratteri: quelli compresi (nell'ordine stabilito dall'encoding, per semplicita' diciamo la tabella ASCII) tra il carattere prima del trattino e quello dopo.

    Per inserire un trattino in una character class (le quadre) bisogna metterlo come primo o come ultimo (o preceduto da un backslash)

    codice:
    /[|-<>]+/  SBAGLIATO
    /[|\-<>]+/ CORRETTO
    /[-|<>]+/  CORRETTO
    /[|<>-]+/  CORRETTO

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Grazie KB. Sapresti gentilmente indicarmi un link o altro dove poter trovare informazioni esaurienti riguardo come posizionare i caratteri all'interno di una regEx analizzata con preg_match() ?

    Grazie

  8. #8
    Un'ottima risorsa online riguardo le regular expressions: http://www.regular-expressions.info/

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da k.b
    Mettere il - senza il backslash prima non e' un errore di sintassi
    codice:
    php -r 'var_dump(preg_match("/[|-<>]+/", "bla"));'
    PHP Warning:  preg_match(): Compilation failed: range out of order in character class at offset 3 in Command line code on line 1
    si, tecnicamente non e' un errore di sintassi, ma io intendevo semplicemente il warning. Lui probabilmente ha i warning disabilitati.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Grazie mille Kappa. bubi la mia impostazione attuale degli errori è: error_reporting = E_ALL | E_STRICT ..sempre in locale.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.