Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    problema con preg_match

    Codice PHP:
    function NumericDateIsOk($DdMmYyyy)     
    {
        return 
    preg_match('/^(0[1-9]|[1-2]\d|3[0-1])-(0[1-9]|1[0-2])-(200[7-9]|2[0-9]\d{2})$/'$DdMmYyyy);
    }
    if (
    $client->NumericDateIsOk($date))
    {
        echo 
    "Controllo passato";

    dove $date è una stringa => 08-12-2008

    perchè non va? Invece funziona se nego l'if

    Codice PHP:
    if (!$client->NumericDateIsOk($date))
    {
        echo 
    "Controllo passato";

    NumericDateIsOk dovrebbe restituire true con quel controllo, eppure qualcosa non va...

    tratto dalla guida
    Codice PHP:
    Esempio 1. Ricerca del testo "php"

    <?php
    // La lettera "i" dopo i delimitatori indica una ricerca case-insensitive
    if (preg_match("/php/i""PHP è il linguaggio scelto.")) {
        echo 
    "Il riconoscimento è avvenuto.";
    } else {
        echo 
    "Testo non riconosciuto.";
    }
    ?>
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  2. #2

    Re: problema con preg_match

    L'espressione regolare è corretta anche se ridondante (specialmente nel controllo dell'anno, dove il 2003 viene validato perché la seconda alternativa piglia da 2000 a 2999):

    Codice PHP:
    function NumericDateIsOk($DdMmYyyy) {
        return 
    preg_match('/^(0[1-9]|[1-2]\\d|3[0-1])-(0[1-9]|1[0-2])-(200[7-9]|2[0-9]\\d{2})$/'$DdMmYyyy);
    }

    function 
    controlla($data) {
        if (
    NumericDateIsOk($data)) {
            echo 
    "$data: ok\n";
        } else {
            echo 
    "$data: data non valida\n";
        }
    }
        
    controlla('08-12-2008');
    controlla('08-00-2008');
    controlla('31-01-2003');
    controlla('8-12-2006');
    controlla('32-12-2007'); 
    Risultato:

    codice:
    08-12-2008: ok
    08-00-2008: data non valida
    31-01-2003: ok
    8-12-2006: data non valida
    32-12-2007: data non valida
    Controlla la tua variabile $date (specialmente che non abbia spazi).

  3. #3
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    Re: Re: problema con preg_match

    Originariamente inviato da ntd
    Risultato:

    codice:
    08-12-2008: ok
    08-00-2008: data non valida
    31-01-2003: ok
    8-12-2006: data non valida
    32-12-2007: data non valida
    Controlla la tua variabile $date (specialmente che non abbia spazi).
    infatti questi controlli devono andare bene.

    Spazi non ce ne sono, ma quella regexp controlla anche le stringhe, giusto? Perchè il mio $date="08-12-2008"...
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  4. #4
    I risultati non li ho scritti a mano: sono copia-incollati dal risultato. Ciò significa che il programmino che ti ho spedito (con la tua espressione regolare) funziona correttamente: il problema è un altro.

    Per esempio, richiami la funzione con $client->NumericDateIsOk(): $client è un oggetto valido e NumericDateIsOk() è un suo metodo? Hai solo una funzione che si chiama NumericDateIsOk()?

    Oppure esegui un die("--$date--") prima della chiamata di NumericDateIsOk() e controlla se effettivamente $date è quello che ti aspetti ed è senza spazi.

    Oppure esegui un die("eseguito") al posto dell'echo "Controllo passato" per vedere se hai problemi con l'output.

    Le cause sono molteplici: l'unica cosa certa è che l'espressione regolare funziona.

    PS: ho dovuto doppioslashare le "d" (\\d) nella scrittura del codice perché altrimenti il forum mi togliava una slash.

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.