Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [regexp] solo numeri interi, o interi e decimali

    Ciao a tutti,
    con questa espressione regolare
    codice:
    var pattern = /^\d+(,\d{2})?$/;
    voglio (vorrei) che nel campo input si possano inserire solo numeri interi, od eventualmente interi e decimali (con la virgola come separatore).
    Il problema è che non funziona se inserisco solo numeri interi, es. 100.
    Any help?

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Language" content="it" />
    <title>Esempio per il Forum di HTML.it</title>
    <script type="text/javascript">
    function checkInput(oMyField, oKeyEvent) {
    	var nChar = oKeyEvent.charCode, sChar = String.fromCharCode(nChar), rSeparator = /,/;
    	return nChar === 0 || /\d/.test(sChar) || (rSeparator.test(sChar) && !rSeparator.test(oMyField.value));
    }
    
    function checkValue(oMyField) {
    	oMyField.value = oMyField.value.replace(/,$/, "").replace(/^,/, "0,");
    }
    </script>
    </head>
    
    <body>
    
    <form name="form1">
    
    
    <input type="text" name="importo1" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="importo2" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="importo3" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="importo4" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="importo5" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="importo6" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" />
    
    <input type="text" name="nomeACaso" onkeypress="return(checkInput(this, event));" onblur="checkValue(this);" onpaste="return(false);" /></p>
    </form>
    
    </body>
    </html>

  3. #3
    Codice PHP:
    is_number: function(string)
        {
            if (!
    isNaN(Number(string)) && string)
            {
                return 
    true;
            }
            else
            {
                return 
    false;
            }
        } 

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    @Friko85
    Se è per quello javascript offre di meglio&hellip; Basterebbe lanciare:

    codice:
    isFinite(tuaStringa)
    e teoricamente avresti risolto il problema con molto meno codice&hellip; Se non fosse che:
    [list=1][*]non puoi fare il controllo in tempo reale,[*]quando si ha a che fare con una stringa è sempre più elegante usare le espressioni regolari piuttosto che convertire la stringa in qualcos'altro,[*]la virgola non viene considerata un separatore valido, come è invece richiesto dall'utente.[/list=1]


    P.S. La funzione isFinite() è una funzione nativa di javascript e ti dice se un qualcosa è convertibile in numero oppure no.

  5. #5
    @carlomarx
    Ma una semplice modifica alla mia espressione regolare non è fattibile? Già la pagina è piena di js code (jquery), non voglio creare altre due funzioni.
    Grazie comunque dell'aiuto

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma hai fatto una ricerca in rete? ci saranno migliaia di regexp sui numeri interi e decimali...

  7. #7
    Originariamente inviato da Vindav
    ma hai fatto una ricerca in rete? ci saranno migliaia di regexp sui numeri interi e decimali...
    Ho cercato sì e ciò che ho trovato è proprio l'espresisone che ho postato
    Se quell'espresisone la provo ad esempio qui http://regexlib.com/RETester.aspx funziona correttamente, sia che inserisca 100,00 che inserisca solo 100.

    Ehm... riguardando il mio script ho trovato l'errore (la exp funziona correttamente così come è scritta)
    codice:
    var pattern = /^\d+(,\d{2})?$/;
      		var dare = $("#dare").val();
    			if(dare != ""){
                                                            //if(!pattern.test.dare){ <--- ecco l'errore!
    				if(!pattern.test(dare)){
      				alert("Devi inserire un numero, senza punteggiatura delle migliaia.\nSolo la virgola è accettata\nI decimali possono essere al massimo due.");
    					$("#dare").val("");
    					$("#dare").focus();
      				return false;
      			}
    			}

  8. #8
    Originariamente inviato da carlomarx
    @Friko85
    Se è per quello javascript offre di meglio&hellip; Basterebbe lanciare:

    codice:
    isFinite(tuaStringa)
    e teoricamente avresti risolto il problema con molto meno codice&hellip; Se non fosse che:
    [list=1][*]non puoi fare il controllo in tempo reale,[*]quando si ha a che fare con una stringa è sempre più elegante usare le espressioni regolari piuttosto che convertire la stringa in qualcos'altro,[*]la virgola non viene considerata un separatore valido, come è invece richiesto dall'utente.[/list=1]


    P.S. La funzione isFinite() è una funzione nativa di javascript e ti dice se un qualcosa è convertibile in numero oppure no.
    il fatto della ',' non ho letto.. isNaN non è nativa? Cosa intendi per controllo in tempo reale?

    il controllo con reg è più lento..

  9. #9
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Originariamente inviato da Friko85
    il fatto della ',' non ho letto.. isNaN non è nativa? Cosa intendi per controllo in tempo reale?
    isNaN() è nativa.
    Per controllo in tempo reale intendo un controllo sul tasto premuto attraverso gli eventi onkeypress o onkeydown. Visto che tra i tasti "accettati", oltre ai numeri, c'è anche il separatore (virgola o punto che sia), con isFinite o isNaN ci fai poco, l'unica opzione che ti resta sono le espressioni regolari. Cmq guardati la funzione che ho postato, così capisci cosa intendo&hellip;

  10. #10
    Originariamente inviato da carlomarx
    isNaN() è nativa.
    Per controllo in tempo reale intendo un controllo sul tasto premuto attraverso gli eventi onkeypress o onkeydown. Visto che tra i tasti "accettati", oltre ai numeri, c'è anche il separatore (virgola o punto che sia), con isFinite o isNaN ci fai poco, l'unica opzione che ti resta sono le espressioni regolari. Cmq guardati la funzione che ho postato, così capisci cosa intendo&hellip;
    x la virgola ok ma il punto è accettato...

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.