2011-12-12 3 views

risposta

19

Sul numericality lato server validate:

class SomeModel 
    validates :some_column, :numericality => {:only_integer => true} 
end 

e sul lato client, aggiungere una maschera di input tramite javascript https://github.com/ruoso/jquery-regex-mask-plugin

$('#some_input').regexMask(/^\d+$/); 
33

Usa number_field_tag, questo genererà un campo numero di HTML5

http://apidock.com/rails/ActionView/Helpers/FormTagHelper/number_field_tag

+0

Ecco come si nascondono gli stepper nei browser basati su webkit. http://stackoverflow.com/a/4812443/902968 –

+0

Purtroppo i campi dei numeri HTML5 sono danneggiati in alcuni browser. Se si digita un carattere non numerico, * lo * lo visualizzerà e aggiungendo danno a insulto, imposterà il valore su * blank *, in modo che il JS e/o il server non vedano nemmeno ciò che l'utente ha digitato. Vedere https://code.google.com/p/chromium/issues/detail?id=304455 e https://github.com/angular/angular.js/issues/2144 – AlexChaffee

1

La risposta di @ clyfe è buona, ma quel plugin non funziona con gli elementi HTML5 type=number. Ecco po 'di codice jQuery veloce che consente solo numeri interi:

$("input[type=number]").keypress(function(event) { 
     if (!event.charCode) return true;   
     ch = String.fromCharCode(event.charCode); 
     return (/[\d]/.test(ch)); 
    }); 

per consentire decimali o virgole, rendono le espressioni regolari sembrano più quelli del plug-in, ad esempio, https://github.com/ruoso/jquery-regex-mask-plugin/blob/master/regex-mask-plugin.js#L8:

/^((\d{1,3}(\,\d{3})*(((\,\d{0,2}))|((\.\d*)?)))|(\d+(\.\d*)?))$/ 

(Si noti che diversi locali hanno convenzioni diverse per i decimali e le virgole, quindi è probabilmente più sicuro per consentire solo le cifre :-)

Si noti inoltre che questa è una soluzione per il bug Chrome qui menzionati :

+1

Ho fatto questa domanda 4 anni fa e @ La risposta di clyfe era ciò di cui avevo bisogno ... forse la tua risposta è utile per le persone che lavorano ora con rail e html5 – Angelo