Qual é a melhor maneira de restringir a entrada "número" apenas para caixas de texto?
Estou procurando algo que permita pontos decimais.
Eu vejo muitos exemplos. Mas ainda temos que decidir qual usar.
Atualização de Praveen Jeganathan
Chega de plugins, o jQuery implementou seus próprios jQuery.isNumeric()
itens adicionais na v1.7. Consulte: https://stackoverflow.com/a/20186188/66767
jquery
validation
isnumeric
wenbert
fonte
fonte
Respostas:
Atualizar
Existe uma solução nova e muito simples para isso:
Veja esta resposta ou tente você mesmo no JSFiddle .
plugin jquery.numeric
Implementei com sucesso muitos formulários com o plugin jquery.numeric .
Além disso, isso funciona com áreas de texto também!
No entanto, observe que Ctrl + A, Copiar + Colar (via menu de contexto) e Drag + Drop não funcionarão conforme o esperado.
HTML 5
Com um suporte mais amplo ao padrão HTML 5, podemos usar
pattern
atributo enumber
tipo parainput
elementos para restringir a entrada apenas de número. Em alguns navegadores (principalmente no Google Chrome), ele também restringe a colagem de conteúdo não numérico. Mais informaçõesnumber
e outros tipos de entrada mais recentes estão disponíveis aqui .fonte
allowDecimal
opção sempre que eu quiser permitir valores inteiros .. a fonte é muito simples e bem escrita.type="number"
.Se você deseja restringir a entrada (em oposição à validação), você pode trabalhar com os principais eventos. algo assim:
E:
Isso imediatamente informa ao usuário que eles não podem inserir caracteres alfa, etc., ou mais tarde, durante a fase de validação.
Você ainda deseja validar porque a entrada pode ser preenchida recortando e colando com o mouse ou, possivelmente, por um preenchimento automático de formulário que pode não acionar os principais eventos.
fonte
$doc.on('keyup blur input propertychange', 'input[name="price"]', function(){$(this).val($(this).val().replace(/[^0-9\.]/g,''));});
Eu pensei que a melhor resposta era a acima para fazer isso.
mas eu concordo que é um pouco doloroso que as teclas de seta e o botão excluir aponte o cursor para o final da string (e por isso foi retrocedido para mim nos testes)
Eu adicionei em uma simples mudança
Dessa forma, se houver algum pressionamento de botão que não fará com que o texto seja alterado, apenas o ignore. Com isso, você pode pressionar as setas e excluir sem pular para o final, mas ele limpa qualquer texto não numérico.
fonte
keypress
poderia ser usado para simplificar ainda mais isso, porque, aparentemente,keyup
ekeydown
gatilho em qualquer tecla do teclado, enquantokeypress
apenas os gatilhos das chaves "caráter" (portanto, não provocando na seta e chaves de exclusão). Veja esta resposta para referência: stackoverflow.com/a/1367720/1298685O plugin jquery.numeric possui alguns erros que eu notifiquei o autor. Ele permite vários pontos decimais no Safari e Opera, e você não pode digitar backspace, teclas de seta ou vários outros caracteres de controle no Opera. Eu precisava de entrada inteira positiva, então acabei escrevendo apenas a minha no final.
fonte
Chega de plugins, o jQuery implementou seu próprio jQuery.isNumeric () adicionado na v1.7.
Resultados das amostras
Aqui está um exemplo de como vincular isNumeric () ao ouvinte de evento
fonte
var v = this.value;
alterá-lo paravar v = this.value.replace(/,/g,'');
. Números como21,345,67.800
também são considerados.$(document).on('keyup keypress', '#somethingSomething', function(){ var aValue = $(this).val(); if($.isNumeric(aValue) === false){ $(this).val(aValue.slice(0,-1)); } });
O plug-in numérico () mencionado acima, não funciona no Opera (você não pode voltar atrás, excluir ou usar as teclas voltar ou avançar).
O código abaixo em JQuery ou Javascript funcionará perfeitamente (e são apenas duas linhas).
JQuery:
Javascript:
Obviamente, isso é apenas para entrada numérica pura (além das teclas backspace, delete, forward / back), mas pode ser facilmente alterado para incluir pontos e caracteres negativos.
fonte
Você pode usar o plug - in Validação com seu método number () .
fonte
Abordagem Javascript
Abordagem jQuery
ATUALIZAR
As respostas acima são para os casos de uso mais comuns - validando a entrada como um número.
fonte
Abaixo está o que eu uso para literalmente bloquear as teclas digitadas. Isso permite apenas números de 0 a 9 e um ponto decimal. Fácil de implementar, sem muito código e funciona como um encanto:
fonte
charCode != 46
da instrução if. Ótima resposta!Como uma pequena melhoria para essa sugestão , você pode usar o plug - in Validação com seus métodos numéricos () , dígitos e intervalo . Por exemplo, o seguinte garante que você obtenha um número inteiro positivo entre 0 e 50:
fonte
Você não vê a aparência e o desaparecimento mágicos dos alfabetos na tecla para baixo. Isso funciona na pasta do mouse também.
fonte
/[^0-9.]/g
Tentei resolver isso usando o jQuery pela primeira vez, mas não estava feliz com os caracteres indesejados (sem dígitos) que realmente apareciam no campo de entrada antes de serem removidos na inicialização.
Procurando outras soluções, encontrei o seguinte:
Inteiros (não negativos)
Fonte: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example Exemplo ao vivo: http://jsfiddle.net/u8sZq/
Pontos decimais (não negativos)
Para permitir um único ponto decimal, você pode fazer algo assim:
Fonte: Acabei de escrever isso. Parece estar funcionando. Exemplo ao vivo: http://jsfiddle.net/tjBsF/
Outras personalizações
Algumas coisas que você poderia estar interessado em fazer:
Deficiências
Eu sei que o título pede soluções jQuery, mas espero que alguém ache isso útil de qualquer maneira.
fonte
Obrigado pelo post Dave Aaron Smith
Editei sua resposta para aceitar ponto decimal e número da seção de número. Este trabalho é perfeito para mim.
fonte
E aplique isso em todas as entradas que você deseja:
fonte
O HTML5 oferece suporte ao número do tipo de entrada, com suporte global a 88% do navegador, de acordo com o CanIUse em outubro de 2015.
Esta não é uma solução relacionada ao JQuery, mas a vantagem é que, nos telefones celulares, o teclado Android será otimizado para digitar números.
Como alternativa, é possível usar o texto do tipo de entrada com o novo parâmetro "padrão". Mais detalhes nas especificações do HTML5.
Eu acho que é melhor que a solução jquery, já que nesta questão, a solução jquery fornecida não suporta separador de milhares. Se você pode usar o html5.
JSFiddle: https://jsfiddle.net/p1ue8qxj/
fonte
Esta função faz a mesma coisa, usa algumas das idéias acima.
fonte
/ * esta é a minha versão do navegador cruzado de Como permitir apenas numérico (0-9) na caixa de entrada HTML usando jQuery?
* /
fonte
Basta executar o conteúdo através de parseFloat (). Ele retornará
NaN
com entrada inválida.fonte
Você pode usar o autoNumeric em decorplanit.com . Eles têm um bom suporte para numeração, moeda, arredondamento etc.
Eu usei em um ambiente IE6, com alguns ajustes de CSS, e foi um sucesso razoável.
Por exemplo, uma classe css
numericInput
pode ser definida e usada para decorar seus campos com as máscaras de entrada numéricas.adaptado do site autoNumeric:
fonte
Eu acho que essa é uma boa maneira de resolver esse problema e é extremamente simples:
Exemplo: JSFiddle
Cenários cobertos
As recomendações mais semelhantes aqui falham em pelo menos uma delas ou exigem muito código para cobrir todas essas situações.
home
,end
e asarrow
chaves.delete
ebackspace
deve ser usado em qualquer índice.keyup
evento não é usado.Cenários falharam
0.5
e excluir apenas o zero não funcionará. Isso pode ser corrigido alterando a regex para/^[0-9]*\.?[0-9]*$/
e adicionando um evento de desfoque para preceder a0
quando a caixa de texto começar com um ponto decimal (se desejado). Veja este cenário avançado para ter uma idéia melhor de como corrigir isso.Plugar
Eu criei este plugin jquery simples para facilitar isso:
fonte
A melhor maneira é verificar o conteúdo da caixa de texto sempre que ela perder o foco.
Você pode verificar se o conteúdo é um "número" usando uma expressão regular.
Ou você pode usar o plug-in Validação, que basicamente faz isso automaticamente.
fonte
Verifique este código de localização para uso do banco de dados:
fonte
Este é um trecho que acabei de fazer (usando uma parte do código de Peter Mortensen / Keith Bentrup) para uma validação de porcentagem inteira em um campo de texto (o jQuery é necessário):
Este código:
Espero que isso ajude os necessitados.
fonte
Encontrei uma ótima solução aqui http://ajax911.com/numbers-numeric-field-jquery/
Acabei de alterar o "keyup" para "keydown" conforme minha exigência
fonte
Se você estiver usando HTML5, não precisará se esforçar muito para realizar a validação. Apenas use -
O atributo step permite que o ponto decimal seja válido.
fonte
Outra maneira de manter a posição do cursor na entrada:
Vantagens:
Plunker: Demo working
fonte
Acabei de encontrar um plug-in ainda melhor. Dá muito mais controle. Digamos que você tenha um campo DOB em que você precisa ser numérico, mas também aceita caracteres "/" ou "-".
Funciona muito bem!
Confira em http://itgroup.com.ph/alphanumeric/ .
fonte
Esse código funcionou muito bem em mim, eu apenas precisei adicionar o 46 no array controlKeys para usar o período, embora eu não ache que seja a melhor maneira de fazê-lo;)
fonte
Eu usei isso, com bons resultados ..
fonte
Isso é muito simples, pois já temos uma função embutida em javascript "isNaN".
fonte