Existe-t-il un moyen rapide de définir une entrée de texte HTML ( <input type=text />
) pour n'autoriser que les frappes numériques (plus '.')?
javascript
jquery
html
Julius A
la source
la source
<input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57'></input>
Réponses:
Remarque: Ceci est une réponse mise à jour. Les commentaires ci-dessous se réfèrent à une ancienne version qui dérangeait les codes clés.
Javascript
Essayez- le vous-même sur JSFiddle .
Vous pouvez filtrer les valeurs d'entrée d'un texte
<input>
avec lasetInputFilter
fonction suivante (prend en charge Copier + Coller, Glisser + Déposer, raccourcis clavier, opérations de menu contextuel, touches non typables, position du curseur, différentes dispositions de clavier et tous les navigateurs depuis IE 9 ) :Vous pouvez maintenant utiliser la
setInputFilter
fonction pour installer un filtre d'entrée:Voir la démo JSFiddle pour plus d'exemples de filtre d'entrée. Notez également que vous devez toujours effectuer la validation côté serveur!
Manuscrit
En voici une version TypeScript.
jQuery
Il existe également une version jQuery de cela. Voir cette réponse .
HTML 5
HTML 5 a une solution native avec
<input type="number">
(voir la spécification ), mais notez que la prise en charge du navigateur varie:step
,min
et lesmax
attributs.e
etE
dans le champ. Voir aussi cette question .Essayez- le vous-même sur w3schools.com .
la source
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true))
Utilisez ce DOM
Et ce script
la source
J'ai cherché longuement et durement une bonne réponse à cela, et nous avons désespérément besoin
<input type="number"
, mais à court de cela, ces 2 sont les moyens les plus concis que je pourrais trouver:Si vous n'aimez pas le caractère non accepté affiché pendant une fraction de seconde avant d'être effacé, la méthode ci-dessous est ma solution. Notez les nombreuses conditions supplémentaires, afin d'éviter de désactiver toutes sortes de navigation et de raccourcis clavier. Si quelqu'un sait comment le compacter, faites-le nous savoir!
la source
/[^\d+]/
et cela fonctionne avec le maintien/[^\d]+/
. Bonne solution cependant. Aussi @ user235859.
aussi permettre . Vous devriez réellement le faire/[^0-9.]/g
En voici une simple qui autorise exactement une décimale, mais pas plus:
la source
Et un autre exemple, qui fonctionne très bien pour moi:
Attache également à l'événement de pression de touche
Et HTML:
Voici un exemple jsFiddle
la source
HTML5 a
<input type=number>
, ce qui vous convient. Actuellement, seul Opera le prend en charge nativement, mais il existe un projet qui a une implémentation JavaScript.la source
type=number
est qu'il n'est pas pris en charge par IE9type=number
autoriser le caractèree
car il le considèree+10
comme un nombre. Le deuxième problème est que vous ne pouvez pas limiter le nombre maximum de caractères dans l'entrée.La plupart des réponses ici ont toutes la faiblesse d'utiliser des événements clés .
Beaucoup de réponses limiteraient votre capacité à faire de la sélection de texte avec des macros de clavier, copier / coller et des comportements plus indésirables, d'autres semblent dépendre de plugins jQuery spécifiques, ce qui tue les mouches avec les mitrailleuses.
Cette solution simple semble fonctionner le mieux pour moi multiplateforme, quel que soit le mécanisme de saisie (frappe, copier + coller, copier + coller avec le bouton droit, parole-texte, etc.). Toutes les macros de clavier de sélection de texte fonctionneraient toujours, et cela limiterait même la capacité de celles-ci à définir une valeur non numérique par script.
la source
replace(/[^\d]+/g,'')
remplacez tous les non-chiffres par une chaîne vide. Le modificateur "i" (insensible à la casse) n'est pas nécessaire./[^\d,.]+/
J'ai choisi d'utiliser une combinaison des deux réponses mentionnées ici, c'est-à-dire
<input type="number" />
et
<input type="text" onkeypress="return isNumberKey(event);">
la source
return !(charCode > 31 && (charCode < 48 || charCode > 57));
HTML5 prend en charge les expressions rationnelles, vous pouvez donc utiliser ceci:
Avertissement: certains navigateurs ne le prennent pas encore en charge.
la source
<input type=number>
.+
signifie l'attribut means in pattern?Javascript
supplémentaire, vous pouvez ajouter une virgule, un point et un moins (, .-)
HTML
la source
Si simple....
// Dans une fonction JavaScript (peut utiliser HTML ou PHP).
Dans votre formulaire, saisissez:
Avec entrée max. (Ces ci-dessus permet un nombre à 12 chiffres)
la source
var charCode = (evt.which) ? evt.which : evt.keyCode;
2 solutions:
Utiliser un validateur de formulaire (par exemple avec le plugin de validation jQuery )
Effectuez une vérification pendant l'événement onblur (c'est-à-dire lorsque l'utilisateur quitte le champ) du champ de saisie, avec l'expression régulière:
la source
var regExpr = /^\d+(\.\d*)?$/;
.123
(au lieu de0.123
) par exemple?var regExpr = /^\d+(\.\d*)?$|^\.\d+$/;
.Une approche plus sûre consiste à vérifier la valeur de l'entrée, au lieu de détourner les touches et d'essayer de filtrer les codes clés.
De cette façon, l'utilisateur est libre d'utiliser les flèches du clavier, les touches de modification, le retour arrière, la suppression, l'utilisation des claviers non standard, la souris pour coller, le glisser-déposer du texte et même les entrées d'accessibilité.
Le script ci-dessous permet des nombres positifs et négatifs
EDIT: J'ai supprimé mon ancienne réponse parce que je pense qu'elle est désuète maintenant.
la source
Vous pouvez utiliser un modèle pour cela:
Ici vous pouvez voir les conseils complets sur l'interface du site Web mobile .
la source
Veuillez trouver ci-dessous la solution mentionnée. Dans cet utilisateur peut être en mesure d'entrer seulement
numeric
valeur, également utilisateur ne peut pas être en mesure decopy
,paste
,drag
etdrop
en entrée.Faites-moi savoir si cela ne fonctionne pas.
la source
Si vous souhaitez suggérer à l'appareil (peut-être un téléphone portable) entre alpha ou numérique, vous pouvez utiliser
<input type="number">
.la source
Un autre exemple où vous pouvez ajouter uniquement des chiffres dans le champ de saisie, ne peut pas les lettres
la source
Une implémentation courte et douce utilisant jQuery et replace () au lieu de regarder event.keyCode ou event.which:
Seul petit effet secondaire que la lettre tapée apparaît momentanément et CTRL / CMD + A semble se comporter un peu étrange.
la source
input type="number"
est un attribut HTML5.Dans l'autre cas, cela vous aidera à:
la source
var charCode = (evt.which) ? evt.which : evt.keyCode;
Code JavaScript:
Code HTML:
fonctionne parfaitement car le code de retour arrière est 8 et une expression regex ne le permet pas, c'est donc un moyen facile de contourner le bogue :)
la source
Un moyen facile de résoudre ce problème consiste à implémenter une fonction jQuery pour valider avec regex les caractères tapés dans la zone de texte par exemple:
Votre code html:
Et la fonction js utilisant jQuery
la source
Juste une autre variante avec jQuery utilisant
la source
il suffit d'utiliser type = "number" maintenant cet attribut supportant la plupart des navigateurs
la source
--1
(2 caractères moins avant 1).Vous pouvez également comparer la valeur d'entrée (qui est traitée comme une chaîne par défaut) à elle-même forcée en tant que numérique, comme:
Cependant, vous devez le lier à un événement comme une touche, etc.
la source
la source
J'ai vu de bonnes réponses mais je les aime aussi petites et aussi simples que possible, alors peut-être que quelqu'un en bénéficiera. J'utiliserais javascript
Number()
et desisNaN
fonctionnalités comme celle-ci:J'espère que cela t'aides.
la source
Utilisez ce DOM:
Et ce script:
... OU ce script, sans indexOf, en utilisant deux
for
...J'ai utilisé l'attribut onkeydown au lieu de onkeypress, car l'attribut onkeydown est vérifié avant l'attribut onkeypress. Le problème serait dans le navigateur Google Chrome.
Avec l'attribut "onkeypress", TAB serait incontrôlable avec "preventDefault" sur google chrome, cependant, avec l'attribut "onkeydown", TAB devient contrôlable!
Code ASCII pour TAB => 9
Le premier script a moins de code que le second, cependant, le tableau de caractères ASCII doit avoir toutes les clés.
Le deuxième script est beaucoup plus gros que le premier, mais le tableau n'a pas besoin de toutes les clés. Le premier chiffre de chaque position du tableau est le nombre de fois que chaque position sera lue. Pour chaque lecture, sera incrémenté de 1 à la suivante. Par exemple:
NCount = 0
48 + NCount = 48
NCount + +
48 + NCount = 49
NCount + +
...
48 + NCount = 57
Dans le cas des clés numériques ne sont que 10 (0 - 9), mais si elles étaient 1 million, il ne serait pas logique de créer un tableau avec toutes ces clés.
Codes ASCII:
la source
Il s'agit d'une fonction améliorée:
la source
La meilleure façon (autoriser TOUS les types de nombres - réel négatif, réel positif, iinteger négatif, entier positif) est:
la source
Il s'agit de la version étendue de la solution de geowa4 . Supports
min
etmax
attributs. Si le nombre est hors limites, la valeur précédente sera affichée.Vous pouvez le tester ici.
Usage:
<input type=text class='number' maxlength=3 min=1 max=500>
Si les entrées sont dynamiques, utilisez ceci:
la source