Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    cambiare formato data e carattere separatore degli elementi

    Ciao, il nuovo problema è questo: vorrei poter trattare la data con la stessa regex qualsiasi separatore abbia.
    ES 1 La data ha il separatore ( - )
    Codice PHP:
    $stringa "Il giorno 2005-08-29 vado in vacanza e il 15-10-2005 finisco la vacanza"
    $pattern '/([0-9]{4})-([0-9]{2})-([0-9]{2})/'
    $replacement '$3-$2-$1'
    $stringa_modificata preg_replace($pattern$replacement$stringa); 
    echo 
    "La stringa da modificare<br />\n"
    echo 
    $stringa "<br />\n"
    echo 
    "La stringa modificata<br />\n"
    echo 
    $stringa_modificata "<hr />\n"
    la stessa stringa con le date che hanno separatore " / " debbo modificare il pattern in:
    Codice PHP:
    $pattern '/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/'
    (Il risultato: Il giorno 29-08-2005 vado in vacanza e il 15-10-2005 finisco la vacanza)

    Per la selezione indiscriminata di qualsiasi carattere separatore vorrei poter inserire anche questo pattern che usato da solo in un altro frammento di codicemi funziona:
    Codice PHP:
    $pattern '/[-\.\/: ]/'
    ES 2:
    Codice PHP:
    $stringa "18/07/2013"
    $pattern '/[-\.\/: ]/'
    $replacement '-'
    $stringa_modificata preg_replace($pattern$replacement$stringa); 
    (Il risultato: 18-07-2013)

    E' possibile unire le due regex? per usarle nel primo esempio?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Nota: probabilmente non ti interessa perché sei sicuro delle date che arrivano, ma per esempio questa regex
    $pattern = '/([0-9]{4})-([0-9]{2})-([0-9]{2})/';

    ti prende anche 0000-00-00 oppure 0180-65-83 che non sono date, se è una cosa che può inserire un utente digitando anno, mese e giorno io farei più attenzione.

    Per quanto riguarda l'unione dei pattern penso che

    $pattern = '/([0-9]{4})[-\.\/: ]{1}([0-9]{2})[-\.\/: ]{1}([0-9]{2})/';

    dovrebbe andare.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Nota: probabilmente non ti interessa perché sei sicuro delle date che arrivano, ma per esempio questa regex
    $pattern = '/([0-9]{4})-([0-9]{2})-([0-9]{2})/';

    ti prende anche 0000-00-00 oppure 0180-65-83 che non sono date, se è una cosa che può inserire un utente digitando anno, mese e giorno io farei più attenzione.

    Per quanto riguarda l'unione dei pattern penso che

    $pattern = '/([0-9]{4})[-\.\/: ]{1}([0-9]{2})[-\.\/: ]{1}([0-9]{2})/';

    dovrebbe andare.
    Ti ringrazio della precisazione e della risposta, Alhazred.
    Giacchè sto lavorando sul progetto sarebbe meglio avere un controllo più ottimizzato.
    Tu cosa suggerisci?

    Grazie ancora

  4. #4
    Ho provato la nuova REGEX ed ho visto che funziona
    Codice PHP:
    $stringa "Il giorno 2005/08/29 vado in vacanza e il 2005-10-15 finisco la vacanza";
    $pattern '/([0-9]{4})[-\.\/: ]{1}([0-9]{2})[-\.\/: ]{1}([0-9]{2})/';
    $replacement '$3-$2-$1';
    $stringa_modificata preg_replace($pattern$replacement$stringa);
    echo 
    "La stringa da modificare<br />\n";
    echo 
    $stringa "<br />\n";
    echo 
    "La stringa modificata<br />\n";
    echo 
    $stringa_modificata "<hr />\n"
    La stringa modificata
    Il giorno 29-08-2005 vado in vacanza e il 15-10-2005 finisco la vacanza
    Grazie per questa che ho appena testato.

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Una migliore potrebbe essere
    Codice PHP:
    $pattern '/([12]+[0-9]{3})[-\.\/: ]{1}([01]+[0-9]{1})[-\.\/: ]{1}([0123]+[0-9]{1})/'
    Ma non saresti ancora al sicuro, così sai che l'anno dovrà per forza cominciare con 1 o 2, il mese con 0 o 1, il giorno con 0 o 1 o 2 o 3, ma non puoi essere sicuro che sia una data valida perché non sa che 2014-02-31 non esiste.

    La cosa migliore sarebbe prendere le 2 date e farle verificare alla funzione checkdate().

  6. #6
    Intanto grazie anche per quest'altra REGEX che naturalmente funziona.
    Il discorso della funzione checkdate() è valido e comunque va eseguita prima o dopo l'uso della REGEX in quanto l'esecuzione della funzione preg_replace() va in ogni caso tentata per tenere lo stesso formato per tutte le date della pagina. E' una questione estetica per la presentazione della pagina.

    Giazie ed alla prossima
    Ultima modifica di micdas; 13-10-2014 a 09:43

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.