Eu tenho um <input type="number">
e quero restringir a entrada dos usuários apenas para números ou números com decimais com até 2 casas decimais.
Basicamente, estou pedindo uma entrada de preço.
Eu queria evitar fazer regex. Existe uma forma de fazer isso?
<input type="number" required name="price" min="0" value="0" step="any">
type="text"
qualquer maneira, então o que isso importa?Respostas:
Em vez de
step="any"
, que permite qualquer número de casas decimais, usestep=".01"
, que permite até duas casas decimais.Mais detalhes na especificação: https://www.w3.org/TR/html/sec-forms.html#the-step-attribute
fonte
500.12345
em qualquer uma das entradas, talvez nosso entendimento dos requisitos seja diferente.:valid
e:invalid
são aplicados conforme o esperado.Se alguém estiver procurando por uma regex que permita apenas números com 2 casas decimais opcionais
Por exemplo, eu achei a solução abaixo bastante confiável
HTML:
JS / JQuery:
fonte
setTimeout()
é esperar okeydown
evento ser concluído antes de definir onewVal
(caso contrário, será o mesmo que ooldVal
). No entanto, com um tempo limite de 0, é inútil e não funciona, pois os dois valores geralmente são os mesmos (no Firefox). Se você defini-lo como 1, por exemplo, funciona bem.Por moeda, sugiro:
Consulte http://jsfiddle.net/vx3axsk5/1/
As propriedades "etapa", "min" e "padrão" do HTML5 serão validadas quando o formulário for enviado, não ativadas. Você não precisa do
step
se tiver umpattern
e não precisa dopattern
se tiver umstep
. Então você pode voltar aostep="any"
meu código, pois o padrão o validará de qualquer maneira.Se você deseja validar o onblur, acredito que fornecer uma dica visual ao usuário também é útil, como colorir o fundo em vermelho. Se o navegador do usuário não suportar,
type="number"
ele fará o fallback paratype="text"
. Se o navegador do usuário não suportar a validação de padrão HTML5, meu snippet JavaScript não impede o envio do formulário, mas fornece uma dica visual. Portanto, para pessoas com pouco suporte ao HTML5 e para pessoas que tentam invadir o banco de dados com o JavaScript desativado ou forjar solicitações HTTP, é necessário validar o servidor novamente de qualquer maneira. O ponto com a validação no front-end é para uma melhor experiência do usuário. Desde que a maioria dos usuários tenha uma boa experiência, não há problema em confiar nos recursos HTML5, desde que o código ainda funcione e você possa validar no back-end.fonte
pattern
não funciona parainput type=number
:<input type="number"> elements do not support use of the pattern attribute for making entered values conform to a specific regex pattern. The rationale for this is that number inputs can't contain anything except numbers, and you can constrain the minimum and maximum number of valid digits using the min and max attributes, as explained above.
Etapa 1: Conecte sua caixa de entrada de número HTML a um evento onchange
ou no código HTML
Etapa 2: escreva o
setTwoDecimalPlace
métodoVocê pode alterar o número de casas decimais variando o valor passado para o
toFixed()
método Veja os documentos MDN .fonte
Eu descobri que usar o jQuery era minha melhor solução.
fonte
Tente isso para permitir apenas 2 decimais no tipo de entrada
Ou Use o jQuery, conforme sugerido por @SamohtVII
fonte
Use este código
Por padrão, o valor da etapa para os elementos de entrada HTML5 é step = "1".
fonte
apenas escreva
lang = 'nb "permite escrever seus números decimais com vírgula ou ponto
fonte
Na entrada:
No script:
fonte