Existe uma maneira rápida de definir uma entrada de texto HTML ( <input type=text />
) para permitir apenas pressionamentos numéricos (mais '.')?
javascript
jquery
html
Julius A
fonte
fonte
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Respostas:
Nota: Esta é uma resposta atualizada. Os comentários abaixo se referem a uma versão antiga que mexia com códigos de chave.
Javascript
Tente você mesmo no JSFiddle .
Você pode filtrar os valores de entrada de um texto
<input>
com a seguintesetInputFilter
função (suporta Copiar + Colar, Arrastar + Soltar, atalhos de teclado, operações do menu de contexto, teclas não tipificáveis, posição do cursor, layouts de teclado diferentes e todos os navegadores desde o IE 9 ) :Agora você pode usar a
setInputFilter
função para instalar um filtro de entrada:Veja a demonstração do JSFiddle para obter mais exemplos de filtros de entrada. Observe também que você ainda deve fazer a validação no servidor!
TypeScript
Aqui está uma versão TypeScript disso.
jQuery
Há também uma versão jQuery disso. Veja esta resposta .
HTML 5
O HTML 5 possui uma solução nativa com
<input type="number">
(consulte a especificação ), mas observe que o suporte ao navegador varia:step
,min
emax
atributos.e
eE
entrar no campo. Veja também esta pergunta .Experimente você mesmo em w3schools.com .
fonte
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Use este DOM
E esse script
fonte
Eu procurei muito e em busca de uma boa resposta para isso, e precisamos desesperadamente
<input type="number"
, mas, além disso, essas 2 são as maneiras mais concisas que eu poderia ter:Se você não gosta do caractere não aceito exibido por uma fração de segundo antes de ser apagado, o método abaixo é minha solução. Observe as inúmeras condições adicionais, para evitar desativar todos os tipos de navegação e teclas de atalho. Se alguém souber compactar isso, avise-nos!
fonte
/[^\d+]/
e funciona com mantendo/[^\d]+/
. Boa solução embora. Também @ user235859.
também. Você deve realmente fazê-lo/[^0-9.]/g
Aqui está um simples que permite exatamente um decimal, mas não mais:
fonte
E mais um exemplo, que funciona muito bem para mim:
Anexar também ao evento de pressionamento de tecla
E HTML:
Aqui está um exemplo do jsFiddle
fonte
O HTML5 possui
<input type=number>
, o que parece certo para você. Atualmente, apenas o Opera suporta nativamente, mas há um projeto que possui uma implementação em JavaScript.fonte
type=number
isso é que não é suportado pelo IE9type=number
permitir oe
caracter porque é consideradoe+10
como número. O segundo problema é que você não pode limitar o número máximo de caracteres na entrada.A maioria das respostas aqui tem a fraqueza de usar eventos-chave .
Muitas das respostas limitariam sua capacidade de fazer a seleção de texto com macros do teclado, copiar + colar e mais comportamentos indesejados; outras parecem depender de plugins jQuery específicos, que estão matando moscas com metralhadoras.
Esta solução simples parece funcionar melhor para mim em várias plataformas, independentemente do mecanismo de entrada (pressionamento de tecla, copiar + colar, clicar com o botão direito do mouse em copiar + colar, falar com texto etc.). Todas as macros do teclado de seleção de texto ainda funcionariam e até limitariam a capacidade de definir um valor não numérico por script.
fonte
replace(/[^\d]+/g,'')
substitua todos os que não sejam dígitos por uma sequência vazia. O modificador "i" (que não diferencia maiúsculas de minúsculas) não é necessário./[^\d,.]+/
Optei por usar uma combinação das duas respostas mencionadas aqui, ie
<input type="number" />
e
<input type="text" onkeypress="return isNumberKey(event);">
fonte
return !(charCode > 31 && (charCode < 48 || charCode > 57));
O HTML5 suporta regexes, para que você possa usar isso:
Aviso: alguns navegadores ainda não são compatíveis.
fonte
<input type=number>
.+
meios no padrão atribuem?Javascript
adicional, você pode adicionar vírgula, ponto e menos (, .-)
HTML
fonte
Tão simples....
// Em uma função JavaScript (pode usar HTML ou PHP).
Na sua entrada de formulário:
Com entrada max. (Estes acima permitem um número de 12 dígitos)
fonte
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 soluções:
Use um validador de formulário (por exemplo, com o plugin de validação jQuery )
Faça uma verificação durante o evento onblur (ou seja, quando o usuário sair do campo) do campo de entrada, com a expressão regular:
fonte
var regExpr = /^\d+(\.\d*)?$/;
.123
(em vez de0.123
), por exemplo?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Uma abordagem mais segura é verificar o valor da entrada, em vez de seqüestrar as teclas pressionadas e tentar filtrar os códigos-chave.
Dessa forma, o usuário é livre para usar setas do teclado, teclas modificadoras, backspace, excluir, usar barras de teclado fora do padrão, usar o mouse para colar, usar arrastar e soltar texto e até mesmo entradas de acessibilidade.
O script abaixo permite números positivos e negativos
Edição: Eu removi minha resposta antiga porque acho que é antiquada agora.
fonte
Você pode usar o padrão para isso:
Aqui você pode ver as dicas completas da interface do site para celular .
fonte
Por favor, encontre a solução abaixo mencionada. Neste usuário pode ser capaz de entrar somente
numeric
valor, também usuário não pode ser capaz decopy
,paste
,drag
edrop
na entrada.Deixe-me saber se não funcionar.
fonte
Se você deseja sugerir ao dispositivo (talvez um celular) entre alfa ou numérico, você pode usar
<input type="number">
.fonte
Mais um exemplo em que você pode adicionar apenas números no campo de entrada, não pode letras
fonte
Uma implementação curta e agradável usando jQuery e replace () em vez de olhar para event.keyCode ou event.which:
Apenas um pequeno efeito colateral que a letra digitada aparece momentaneamente e CTRL / CMD + A parece se comportar um pouco estranho.
fonte
input type="number"
é um atributo HTML5.No outro caso, isso ajudará você:
fonte
var charCode = (evt.which) ? evt.which : evt.keyCode;
Código JavaScript:
Código HTML:
funciona perfeitamente porque o código de backspace é 8 e uma expressão regex não permite, por isso é uma maneira fácil de ignorar o bug :)
fonte
Uma maneira fácil de resolver esse problema é implementar uma função jQuery para validar com regex os caracteres digitados na caixa de texto, por exemplo:
Seu código html:
E a função js usando jQuery
fonte
Apenas uma outra variante do jQuery usando
fonte
basta usar type = "number" agora esse atributo é suportado na maioria dos navegadores
fonte
--1
(2 caracteres antes de 1).Você também pode comparar o valor de entrada (que é tratado como string por padrão) com ele próprio forçado como numérico, como:
No entanto, você precisa vincular isso ao evento, como keyup etc.
fonte
fonte
Vi algumas ótimas respostas, no entanto, gosto delas o mais pequenas e simples possível, por isso talvez alguém se beneficie disso. Eu usaria javascript
Number()
eisNaN
funcionalidade como esta:Espero que isto ajude.
fonte
Use este DOM:
E este script:
... OU esse script, sem indexOf, usando dois
for
's ...Eu usei o atributo onkeydown em vez de onkeypress, porque o atributo onkeydown é verificado antes do atributo onkeypress. O problema estaria no navegador Google Chrome.
Com o atributo "onkeypress", o TAB seria incontrolável com "preventDefault" no google chrome, no entanto, com o atributo "onkeydown", o TAB se tornará controlável!
Código ASCII para TAB => 9
O primeiro script tem menos código que o segundo, no entanto, a matriz de caracteres ASCII deve ter todas as chaves.
O segundo script é muito maior que o primeiro, mas a matriz não precisa de todas as chaves. O primeiro dígito em cada posição da matriz é o número de vezes que cada posição será lida. Para cada leitura, será incrementado 1 para o próximo. Por exemplo:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
No caso de chaves numéricas, são apenas 10 (0 - 9), mas se fossem 1 milhão, não faria sentido criar uma matriz com todas essas chaves.
Códigos ASCII:
fonte
Esta é uma função aprimorada:
fonte
A melhor maneira (permitir TODOS os tipos de números - negativo real, positivo real, zero negativo, positivo inteiro) é:
fonte
Esta é a versão estendida da solução da geowa4 . Suportes
min
emax
atributos. Se o número estiver fora da faixa, o valor anterior será mostrado.Você pode testá-lo aqui.
Uso:
<input type=text class='number' maxlength=3 min=1 max=500>
Se as entradas são dinâmicas, use isto:
fonte