Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Stamos
    Registrato dal
    Jul 2004
    Messaggi
    160

    [PHP] Verifica di una stringa

    In un mio script esiste un campo text dove l'utente può inserire la data di un certo evento. Il formato della data deve essere: gg/mm/aa

    Vorrei fare un controllo sulla stringa inserita dall'utente per evitare che lui inserisce una stringa in formato sbagliato, esempi:

    - 41/22/05
    - 12\12*05
    - etc etc ...

    In pocche parole vorrei che:
    - il 1° elemento della stringa sia una cifra tra 0 e 3
    - il 2° elemento della stringa sia una cifra tra 0 e 1
    - il 3° elemento della stringa sia il carattere "/"
    - e avanti cosi ...

    Come si può fare un controllo del genere? Qualcuno mi potrebbe dare una mano?

  2. #2
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    puoi farlo in due modi:

    1 - crei tre campi, uno per giorno, l'altro per mese e l'altro per anno e fai tutti i confronti del caso.
    oppure
    2 - usa la funzione substr sulla stringa
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  3. #3
    Utente di HTML.it L'avatar di Stamos
    Registrato dal
    Jul 2004
    Messaggi
    160
    cioè come usare la substr? :master:


    ho visto che praticamente ti restituisce la parte rimanente della stringa ...

  4. #4
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    yesss

    se vuoi usare substr, allora piglia la stringa e mettila in una variabile.

    prima di fare questo, setta il campo form a 8 caratteri massimi.

    $stringa="11/03/1980";

    $analisi_giorno= substr($stringa, 0, 2) ---> restituisce 11 perche hai settato come primo parametro 0, cioè parti dal primo carattere (0 = primo carattere e cosi via) e seleziona il testo per 2 caratteri (il due indica l'estensione in numeri di caratteri).
    $analisi_barretta=substr($stringa, 2,1) --> oppure $stringa{2} è lo stesso se vuoi selezionare solo un carattere.

    e cosi via...

    poi prendi la variabile del giorno e stabilisci con if che deve essere uguale da 1 a 31, altrimenti (else) stampi "Ei che cavolo di giorno hai scritto".
    e cosi via, per la variabile mese che deve essere uguale da 1 a 12, e l'anno. Per l'anno magari puoi fare in modo di accettare che ne so, i maggiorenni quindi come limite massimo puoi mettere 1987 (pero non ti da la sicurezza della maggiore età, perche la persona potrebbe compiEre 18 anni il 31 dicembre 2005 ed essere di fatto un minorenne , in questo caso devi agire anche sul mese e sul giorno attuale).
    per la barretta idem, decisa la direzione / \ fai la comparazione con if.

    se tutti gli if danno l'ok, allora accetta la stringa.

    cmq c'è anche il javascript per controllare il formato dei dati. ciauz
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  5. #5
    Utente di HTML.it L'avatar di Stamos
    Registrato dal
    Jul 2004
    Messaggi
    160
    [supersaibal]Originariamente inviato da hyb
    $stringa{2} è lo stesso se vuoi selezionare solo un carattere.

    e cosi via...[/supersaibal]
    Ho pensato di fare un singolo controllo direttamente su ogni carattere della mia stringa ... Per il carattere "/" potrei fare:

    Codice PHP:
    if (($stringa{2}!='/') or ($stringa{5}!='/')) {
    error ....

    Visto che controllo se il carattere ha un valore specifico ....



    Per gli altri caratteri però che assumono valore da un certo range per esempio il primo carattere può prendere valori tra 0 e 3, come posso fare?

    cioè come si può fare un controllo del genere ?

    Codice PHP:
    if(($stringa{0}== "numero tra 0 e 3 "

  6. #6
    Utente di HTML.it L'avatar di nabozzz
    Registrato dal
    Nov 2004
    Messaggi
    145
    Ciao

    puoi provare con questo

    http://it2.php.net/manual/it/function.checkdate.php

    anche se devo dirti che non l'ho mai usato !!

    oppure puoi usare le espressioni regolari


    esempio...

    ^([0-3][0-9][\/][0-1][0-9][\/][0-9]{2})$

    se il formato è corretto passare al checkdate per vedere se la data esiste

    byez

  7. #7
    Utente di HTML.it L'avatar di Stamos
    Registrato dal
    Jul 2004
    Messaggi
    160
    [supersaibal]Originariamente inviato da nabozzz
    oppure puoi usare le espressioni regolari

    esempio...

    ^([0-3][0-9][\/][0-1][0-9][\/][0-9]{2})$

    se il formato è corretto passare al checkdate per vedere se la data esiste [/supersaibal]
    1 domanda:

    ^([0-3][0-9][\/][0-1][0-9][\/][0-9]{2})$


    i caratterri in grasseto a cosa servono?

  8. #8
    Utente di HTML.it L'avatar di hyb
    Registrato dal
    Aug 2003
    Messaggi
    424
    ovviamente puoi usare anche le espressioni regolari.


    ritornando a quello che ho detto prima
    puoi vedere se il giorno è uguale o maggiore di 1 ma minore o uguale a 31.

    Codice PHP:
    $giorno31;
    if (
    $giorno <= 31 AND $giorno >=1) {
    print 
    "Ok il giorno è esatto";
    }else{
        print 
    "Il giorno sbagliato fu";

    attenzione pero non puoi tenere sotto controllo i mesi di 30 e 31 facendo solo questa cosa, se uno scrive 31 aprile e non esiste?
    C'è chi si mette degli occhiali da sole, per avere più carisma e sintomatico mistero.

  9. #9
    codice:
    $data = "20/05/05";
    if( preg_replace(
    	"/^([0-9]{2})\/([0-9]{2})\/([0-9]{2})$/e",
    	'checkdate((int)"\\2",(int)"\\1",(int)"\\3");',
    	$data
    ) ) {
    	echo 'OK';
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.