Controllo carattere immesso

giovedì 27 agosto 2009 - 14.07

Anonimo Profilo | Senior Member

Ciao a tutti!
In una textbox vorrei poter fare un controllo, cioè: che la textbox accetti soltanto caratteri numerici. Come potrei farlo?
Grazie!
--------------------------------------------------------------------------

Allan Felipe

paoval72 Profilo | Senior Member

Ciao, io sto usando molto le regular expressions. Di solito sbircio qui:
http://www.regexlib.com/DisplayPatterns.aspx

Ci sono spiegazioni su quello che fanno e puoi anche testarle (o provarne di nuove).

PV

Anonimo Profilo | Senior Member

^([1-9]|[1-9]\d|100)$

Questa dice che comprende i numeri da 1 a 100. Potresti farmi un breve esempio in codice c# su una textbox, comprendendo numeri da 0 a 10?
Siccome è da poco che programmo con c# mi trovo in difficoltà.
Grazie.
--------------------------------------------------------------------------

Allan Felipe

paoval72 Profilo | Senior Member

Se ho capito bene, vorresti un esempio su come usare una regex in c#?
Ma hai un evento (una select, un click, un check...) in cui fare i controlli di validazione dei dati, oppure vorresti farlo quando digiti i tasti (e in questo caso mi sa che ci vuole javascript)?

Anonimo Profilo | Senior Member

>Se ho capito bene, vorresti un esempio su come usare una regex
>in c#?
>Ma hai un evento (una select, un click, un check...) in cui fare
>i controlli di validazione dei dati, oppure vorresti farlo quando
>digiti i tasti (e in questo caso mi sa che ci vuole javascript)?

Esatto un esempio su come usare una regex. Anche se l'ideale sarebbe la seconda opzione che hai citato, cioè quando digito i tasti.
--------------------------------------------------------------------------

Allan Felipe

Gluck74 Profilo | Guru

le regexp le puoi usare anche in javascript.
Ci sono tanti siti che ti spiegano la sintassi per greare un oggetto regExp, non sto qui a dirti come. Quello che dovresti fare è:

creare una var regexp con il pattern giusto
associare al keyup del texbox una funzione che controlla i tasti digitati

il risultato è che se permetti solo numeri, quando digiti altro non succede nulla, ovvero non immetti caratteri nel textbox.
Puoi anche affinare la cosa lanciando un alert per dire quali caratteri sono accettati.

tutto lato javascript

paoval72 Profilo | Senior Member

Confermo quanto scritto da Gluck74: le regex sono in javascript ben prima del framework 2.0. Le ho usate proprio stamattina, anche se il controllo era più semplice perchè passavo da un evento onclientclick di un button. Comunque, come scritto, dovresti intercettare l'event.keycode (il tasto cliccato sulla tastiera) in una funzione che mette a confronto lo scritto con la tua regex. Due solei avvertimenti:
1) occhio ai caratteri di escape (/), che possono mandare in errore la funzione.
2) controllando carattere per carattere, potresti ritrovarti un numero tipo "0003456". Se non ricordo male, c'è anche qualche regex che accetta solo numeri da 1 in su: oppure fai un ulteriore controllo per evitare lo zero in testa.
Domani mattina, se il lavoro me lo permette, faccio anch'io qualche prova e ti posto un po' di codice.
Ciao,
PV

Gluck74 Profilo | Guru

ad esempio, questa funzione controlla che nel textbox vengano inseriti solo valori numerici

void function DigitN(objInput) { //alert(window.event.keyCode); var strErr = ''; if (window.event.keyCode != 13) { reCharValid = /^(([0-9]*(\r)*)|(\-[0-9]+(\r)*))$/; if (!TestDigit(reCharValid, objInput)){ window.event.returnValue = false; strErr = 'Per questo campo sono permessi solo caratteri numerici.\n'; } } if (strErr != '') //gestisci l'errore come meglio credi }

oppure questa che controlla che sia un numero di telefono, quindi accetta uno 0 iniziale ed eventualmente un separatore come / o -

void function DigitNTel(objInput) { //alert(window.event.keyCode); var strErr = ''; if (window.event.keyCode != 13) { reCharValid = /^((([0-9]{1,})+([0-9\.\-\/ ])?)*([0-9])+(\r)*)*$/; if (!TestDigit(reCharValid, objInput)){ window.event.returnValue = false; strErr = 'Per questo campo sono permessi solo caratteri numerici.\n'; } } if (strErr != '') //gestisci l'errore come meglio credi }


ti serve anche la funzione generica:

function TestDigit(regExpr, objInput) { //var strTest = objInput.value + String.fromCharCode(window.event.keyCode); StrErr=0; var strTest = objInput.value; if (!regExpr.test(strTest)) { return false; } return true; }

paoval72 Profilo | Senior Member

Non ho provato, ma direi che la soluzione è bell'e pronta!
Ciao,
PV

Anonimo Profilo | Senior Member

Grazie. Ora provo poi vi dico.
--------------------------------------------------------------------------

Allan Felipe

Anonimo Profilo | Senior Member

Funziona. Grazie mille!
--------------------------------------------------------------------------

Allan Felipe
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5