Visualizzazione dei risultati da 1 a 8 su 8

Discussione: preg_match dd/mm/yyyy

  1. #1

    preg_match dd/mm/yyyy

    Salve a tutti, sto effettuando un controllo dei campi lato server, (oltreché con js)
    qualcuno potrebbe aiutarmi a velidare un campo data?

    Codice PHP:
     else if (!preg_match("^(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d$", @$_POST['data_inc'])) $errors[]="Il campo Data Incarico contiene caratteri non validi o non è nel formato corretto"
    Ho verificato che $_POST['data_inc'] contiene la data nel formato corretto dd/mm/yyyy ma ottengo sempre l'errore "Il campo Data Incarico contiene caratteri non validi o non è nel formato corretto";
    E' giusto il pattern che sto utilizzando?

  2. #2
    Chiedo scusa, ho risolto, ci vogliono gli slash a inizio e fine stringa

    Codice PHP:
    /^(0[1-9]|[12][0-9]|3[01])[\/](0[1-9]|1[012])[\/](19|20)\d\d$/ 
    Ora funziona

  3. #3
    Se però provi ad inserire una data del 2000 con soli due numeri per l'anno la considera sbagliata...

    Es: 1/1/00

  4. #4
    mi sapete dire perchè questa reg exp non funziona con le date del 2000?

    Codice PHP:
    preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/)"$data
    se io la inserisco in un semplice codice che mi verifica la data tipo questo:

    Codice PHP:
    $verificaData ControlloData("1/1/00");
    var_dump($verificaData);


    function 
    ControlloData($data){
        if(
    preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/"$data)){
            echo 
    "non sono numeri 
    "
    ;
            return 
    false;
        }else{
            echo 
    "numeri verificati 
    "
    ;
            
    $data str_replace(" ""-"$data);
            
    $data str_replace(".""-"$data);
            
    $data str_replace("/""-"$data);
            
    $arrayData explode("-"$data);
            
    $Giorno $arrayData[0];
            
    $Mese $arrayData[1];
            
    $Anno $arrayData[2];
            if(!
    checkdate($Mese$Giorno$Anno)){
                return 
    false;
            }else{
                return 
    true;
            }
        }

    vorrei trovare una forma che mi desse la possibilità di verificare le date sia che ci siano o meno le 2 cifre per i mesi e i giorni, sia che ci siano o meno le 4 cifre per l'anno (che quindi potrebbero essere anche 3,2 o 1).

    poi dovrei trovare anche una reg exp per usarla nel preg_replace per sostituire i vari
    str_replace, ovvero un qualcosa che mi faccia sostituire qualsiasi carattere ci sia tra il giorno e il mese e tra il mese e l'anno, con il simbolo - (trattino)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da Ferie
    mi sapete dire perchè questa reg exp non funziona con le date del 2000?

    Codice PHP:
    preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/)"$data
    se io la inserisco in un semplice codice che mi verifica la data tipo questo:

    Codice PHP:
    $verificaData ControlloData("1/1/00");
    var_dump($verificaData);


    function 
    ControlloData($data){
        if(
    preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/"$data)){
            echo 
    "non sono numeri 
    "
    ;
            return 
    false;
        }else{
            echo 
    "numeri verificati 
    "
    ;
            
    $data str_replace(" ""-"$data);
            
    $data str_replace(".""-"$data);
            
    $data str_replace("/""-"$data);
            
    $arrayData explode("-"$data);
            
    $Giorno $arrayData[0];
            
    $Mese $arrayData[1];
            
    $Anno $arrayData[2];
            if(!
    checkdate($Mese$Giorno$Anno)){
                return 
    false;
            }else{
                return 
    true;
            }
        }

    vorrei trovare una forma che mi desse la possibilità di verificare le date sia che ci siano o meno le 2 cifre per i mesi e i giorni, sia che ci siano o meno le 4 cifre per l'anno (che quindi potrebbero essere anche 3,2 o 1).

    poi dovrei trovare anche una reg exp per usarla nel preg_replace per sostituire i vari
    str_replace, ovvero un qualcosa che mi faccia sostituire qualsiasi carattere ci sia tra il giorno e il mese e tra il mese e l'anno, con il simbolo - (trattino)
    Ti ho corretto un po la funzione come volevi, la data ora puo essere anche 1-1-1
    ma l'importante è che sia valida per intenderci non puoi mettere 00
    poi ti ho aggiunto un piccolo filtro che sostituisce tutto quello che non è
    un numero con lo spazio

    Codice PHP:
    $verificaData ControlloData("1-1-10"); 
    var_dump($verificaData);


    function 
    ControlloData($data){ 
        if(!
    preg_match("/^[0-9]{1,2}[-.\\/s][0-9]{1,2}[-.\\/s][0-9]{1,4}$/"$data)){ 
            echo 
    "non sono numeri 
    "

            return 
    false
        }else{ 
            echo 
    "numeri verificati 
    "

            
    $data preg_filter('/[^0-9]/',' ',$data);
            
    $data explode(' ',$data);
            if(!
    checkdate($data[0], $data[1], $data[2])){ 
                return 
    false
            }else{ 
                return 
    true
            } 
        } 


  6. #6
    Grazie per la correzione, resta comunque il problema delle date del 2000 se queste sono scritte con soli due numeri, ad esempio 1-1-00 non la riconosce come data valida, come fare?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da Ferie
    Grazie per la correzione, resta comunque il problema delle date del 2000 se queste sono scritte con soli due numeri, ad esempio 1-1-00 non la riconosce come data valida, come fare?
    Originariamente inviato da RoTeam
    Ti ho corretto un po la funzione come volevi, la data ora puo essere anche 1-1-1
    ma l'importante è che sia valida per intenderci non puoi mettere 00
    Codice PHP:
    if(!checkdate($data[0], $data[1], $data[2])){  
                return 
    false;  
            }else{  
                return 
    true;  
            } 
    Secondo te 00 è una data valida come anno?

  8. #8
    Originariamente inviato da RoTeam
    Secondo te 00 è una data valida come anno?
    Fino a prova contraria il primo gennaio del 2000 lo posso scrive anche in questa maniera 01-01-00 oppure anche in questa 1-1-00 oppure anche così 1-1-2000, ...


    La funzione citata sbaglia quando viene inserita una data 1-1-00 ma esegue correttamente 1-1-2000 che sono la stessa data...

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.