Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788

    Validare un campo, con regexp?

    Salve a tutti.

    Io ho due campi in cui devono inserire l'ora nel formato: hh:mm

    quindi non mi va bene 9:15 non va bene 09,15 ecc.
    Insomma vorrei fare in modo che l'utente sia obbligato ad inserire due cifre i due punti e poi altre 2 cifre, e già che ci sono le prime due cifre (che sono l'ora) dovrebbero essere comprese tra 00 e 23, e le seconde tra 00 e 59.

    L'unica soluzione che mi viene in mente per evitare di controllare carattere per carattere è usare le espressioni regolari, ma non le ho mai usate e vi chiedo pensate si possa fare quello che ho in mente o mi consigliate di pensare ad altro?
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Le regexp sono ottime per il tipo di controllo che chiedi.
    Si possono anche fare sofisticate al massimo, come mostrato nel sito delle RegExp che trovi linkato fra i link utili in un thread che parla di validazione della data (era stato citato da br1).

    Per una cosa approssimata, vedi questa:
    /^[0-2][0-9]\:[0-5][0-9]$/

    /^ inizio della stringa
    [0-2] primo carattere: tra 0 e 2
    [0-9] secondo carattere (numerico)
    \: duepunti
    [0-5] primo carattre minuti
    [0-9] carattere numerico
    $/ fine stringa

    per il test puoi usare il metodo .test() delle regexp, oppure il metodo .match() o .search() delle stringhe.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    Originariamente inviato da Mich_
    Le regexp sono ottime per il tipo di controllo che chiedi.
    Si possono anche fare sofisticate al massimo, come mostrato nel sito delle RegExp che trovi linkato fra i link utili in un thread che parla di validazione della data (era stato citato da br1).

    Per una cosa approssimata, vedi questa:
    /^[0-2][0-9]\:[0-5][0-9]$/

    /^ inizio della stringa
    [0-2] primo carattere: tra 0 e 2
    [0-9] secondo carattere (numerico)
    \: duepunti
    [0-5] primo carattre minuti
    [0-9] carattere numerico
    $/ fine stringa

    per il test puoi usare il metodo .test() delle regexp, oppure il metodo .match() o .search() delle stringhe.

    Ciao
    Michele
    Perfetto sei stato gentilissimo.. ora me le studio un attimo, e vedo di capire qualcosa..
    Grazie per la chiarezza!
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao a tutti,

    visto che mi piacciono le regular expression dico anche io la mia
    codice:
    <script language="javascript">
    function FormatoOrario(str){
    	RE = /^(([0-1]\d)|(2[0-3]))\:[0-5][0-9]$/
    	return RE.test(str)
    }
    function test(ff){
    	if(FormatoOrario(ff.orario.value))alert('Orario valido');
    	else alert('Orario NON valido!')
    }
    </script>
    <form>hh:mm (00:00  -  23:59)
    <input type="text" name="orario">
    <input type="button" value="test" onclick="test(this.form)">
    </form>
    della RE
    /^(([0-1]\d)|(2[0-3]))\:[0-5][0-9]$/
    spiego solo (([0-1]\d)|(2[0-3])) che sarebbe
    ((0 o 1) e qualunque cifra) o (2 e (un numero tra 0 e 3))
    il resto è come la spiegazione di Mich_

  5. #5
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    Originariamente inviato da willybit
    Ciao a tutti,

    visto che mi piacciono le regular expression dico anche io la mia
    codice:
    <script language="javascript">
    function FormatoOrario(str){
    	RE = /^(([0-1]\d)|(2[0-3]))\:[0-5][0-9]$/
    	return RE.test(str)
    }
    function test(ff){
    	if(FormatoOrario(ff.orario.value))alert('Orario valido');
    	else alert('Orario NON valido!')
    }
    </script>
    <form>hh:mm (00:00  -  23:59)
    <input type="text" name="orario">
    <input type="button" value="test" onclick="test(this.form)">
    </form>
    della RE
    /^(([0-1]\d)|(2[0-3]))\:[0-5][0-9]$/
    spiego solo (([0-1]\d)|(2[0-3])) che sarebbe
    ((0 o 1) e qualunque cifra) o (2 e (un numero tra 0 e 3))
    il resto è come la spiegazione di Mich_
    Uhm interessante...
    Una domanda, ma la d di: "/^(([0-1]\d])|(.."
    é propria delle reg exp?
    Leggevo su una pillola che è il carattere "." che vorrebbe dire tutti i caratteri..
    Immagino quindi che la d sia tutte le cifre...
    :master:
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  6. #6
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da Inoki
    Uhm interessante...
    Una domanda, ma la d di: "/^(([0-1]\d])|(.."
    é propria delle reg exp?
    Leggevo su una pillola che è il carattere "." che vorrebbe dire tutti i caratteri..
    Immagino quindi che la d sia tutte le cifre...
    :master:
    esattamente
    \d è uguale a [0-9] cioè qualunque numero

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.