Comment faire pour que la balise D'entrée HTML n'accepte que des valeurs numériques?

je dois m'assurer qu'un certain champ <input> ne prend les nombres que comme valeur. L'entrée n'est pas partie d'un formulaire. Par conséquent, il n'est pas soumis, donc la validation pendant la soumission n'est pas une option. Je veux que l'utilisateur soit incapable de taper des caractères autres que des nombres.

y a-t-il un moyen pratique pour y parvenir?

96
demandé sur Chiel ten Brinke 2012-12-19 16:40:11

21 réponses

vous pouvez utiliser HTML5 numéro de type d'entrée pour restreindre seulement les entrées de nombre:

<input type="number" name="someid" />

cela ne fonctionnera que dans le navigateur de plainte HTML5. Assurez-vous que le doctype de votre document html est:

<!DOCTYPE html>

Voir aussi https://github.com/jonstipe/number-polyfill pour un support transparent dans les navigateurs plus anciens.

pour usage général, vous pouvez avoir JS validation comme suit:

function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}

<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>

si vous voulez autoriser les décimales, remplacez "if condition" par ceci:

if (charCode > 31 && (charCode != 46 &&(charCode < 48 || charCode > 57)))

Source: HTML de saisie de texte permet uniquement d'entrée numérique

Démo JSFiddle: http://jsfiddle.net/viralpatel/nSjy7 /

219
répondu Viral Patel 2017-10-31 21:20:14

vous pouvez également utiliser l'attribut pattern dans html5:

<input type="text" name="name" pattern="[0-9]" title="Title" /> 

http://www.pageresource.com/html5/input-validation-tutorial /

bien que, si votre doctype n'est pas html alors je pense que vous aurez besoin d'utiliser du javascript/jquery.

20
répondu martincarlin87 2012-12-19 12:45:00

s'il vous plaît essayer ce code avec le champ d'entrée lui-même

<input type="text" name="price" id="price_per_ticket" class="calculator-input" onkeypress="return event.charCode >= 48 && event.charCode <= 57"></div>

ça marchera très bien.

5
répondu subindas pm 2017-08-23 11:12:50

Vous pouvez utiliser un <input type="number" /> . Cela permettra seulement les chiffres en othe zone de saisie.

exemple: http://jsfiddle.net/SPqY3 /

veuillez noter que l'étiquette d'entrée type="number" n'est prise en charge que dans les navigateurs plus récents.

pour firefox, vous pouvez valider l'entrée en utilisant javascript:

http://jsfiddle.net/VmtF5 /

mise à jour 2018-03-12: le soutien de navigateur est beaucoup mieux maintenant il est soutenu par ce qui suit:

  • Chrome 6+
  • Firefox 29+
  • Opéra 10.1+
  • Safari 5+
  • Edge
  • (Internet Explorer 10+)
5
répondu starbeamrainbowlabs 2018-03-12 13:32:12

function AllowOnlyNumbers(e) {

    e = (e) ? e : window.event;
    var key = null;
    var charsKeys = [
        97, // a  Ctrl + a Select All
        65, // A Ctrl + A Select All
        99, // c Ctrl + c Copy
        67, // C Ctrl + C Copy
        118, // v Ctrl + v paste
        86, // V Ctrl + V paste
        115, // s Ctrl + s save
        83, // S Ctrl + S save
        112, // p Ctrl + p print
        80 // P Ctrl + P print
    ];

    var specialKeys = [
    8, // backspace
    9, // tab
    27, // escape
    13, // enter
    35, // Home & shiftKey +  #
    36, // End & shiftKey + $
    37, // left arrow &  shiftKey + %
    39, //right arrow & '
    46, // delete & .
    45 //Ins &  -
    ];

    key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

    //console.log("e.charCode: " + e.charCode + ", " + "e.which: " + e.which + ", " + "e.keyCode: " + e.keyCode);
    //console.log(String.fromCharCode(key));

    // check if pressed key is not number 
    if (key && key < 48 || key > 57) {

        //Allow: Ctrl + char for action save, print, copy, ...etc
        if ((e.ctrlKey && charsKeys.indexOf(key) != -1) ||
            //Fix Issue: f1 : f12 Or Ctrl + f1 : f12, in Firefox browser
            (navigator.userAgent.indexOf("Firefox") != -1 && ((e.ctrlKey && e.keyCode && e.keyCode > 0 && key >= 112 && key <= 123) || (e.keyCode && e.keyCode > 0 && key && key >= 112 && key <= 123)))) {
            return true
        }
            // Allow: Special Keys
        else if (specialKeys.indexOf(key) != -1) {
            //Fix Issue: right arrow & Delete & ins in FireFox
            if ((key == 39 || key == 45 || key == 46)) {
                return (navigator.userAgent.indexOf("Firefox") != -1 && e.keyCode != undefined && e.keyCode > 0);
            }
                //DisAllow : "#" & "$" & "%"
            else if (e.shiftKey && (key == 35 || key == 36 || key == 37)) {
                return false;
            }
            else {
                return true;
            }
        }
        else {
            return false;
        }
    }
    else {
        return true;
       }
    }
<h1>Integer Textbox</h1>
    <input type="text" autocomplete="off" id="txtIdNum" onkeypress="return AllowOnlyNumbers(event);" />
3
répondu Sameh Saeed 2015-11-19 09:08:28
<input 
    onkeyup="value=isNaN(parseFloat(value))?1000:value" 
       type="number" 
      value="1000"
>

onkeyup se déclenche lorsque la clé est libérée.

isNaN(parseFloat(value))? vérifie si la valeur d'entrée n'est pas un nombre.

Si c'est pas un nombre, la valeur est fixée à 1000 : Si c'est un nombre, la valeur est définie à la valeur.

note: pour une raison quelconque, il ne fonctionne avec type="number"

Pour le rendre encore plus excitant, vous pouvez également avoir une limite:

<input 
    onkeyup="value=isNaN(parseFloat(value))||value<0||value>9000?1000:value"
       type="number"
      value="1000"
>

Profitez-en!

3
répondu user40521 2015-11-28 21:41:17

je me suis battu avec celui-ci un moment. De nombreuses solutions ici et ailleurs semblaient compliquées. Cette solution utilise jQuery/javascript aux côtés de HTML.

    <input type="number" min="1" class="validateNumber">

    $(document).on('change', '.validateNumber', function() { 
        var abc = parseInt($(this).val());
        if(isNaN(abc)) { abc = 1; }
        $(this).val(abc);
    });

dans mon cas, je suivais de petites quantités avec une valeur minimale de 1, d'où min=" 1 " dans la balise d'entrée et abc = 1 dans le contrôle isNaN (). Pour les nombres positifs seulement, vous pouvez changer ces valeurs à 0 et même simplement supprimer le min = "1" de la balise d'entrée pour tenir compte du négatif nombre.

cela fonctionne aussi pour plusieurs boîtes (et pourrait vous faire gagner du temps de chargement en les faisant individuellement par id), il suffit d'ajouter la classe" validateNumber " si nécessaire.

explication

parseInt () fait essentiellement ce dont vous avez besoin, sauf qu'il renvoie NaN plutôt qu'une valeur entière. Avec un simple if (), vous pouvez définir la valeur "fallback" que vous préférez dans tous les cas où NaN est retourné: -). Aussi W3 déclare ici que la version globale de NaN Tapera moulé avant vérification qui donne un peu plus de proofing (nombre.isNaN () ne fait pas cela). Toutes les valeurs envoyées à un serveur/backend doit encore être validé!

3
répondu Isaiah 2016-06-23 22:50:32
<input type="text" name="myinput" id="myinput" onkeypress="return isNumber(event);" />

et dans le js:

function isNumber(e){
    e = e || window.event;
    var charCode = e.which ? e.which : e.keyCode;
    return /\d/.test(String.fromCharCode(charCode));
}

ou vous pouvez l'écrire d'une manière compliquée bu utile:

<input onkeypress="return /\d/.test(String.fromCharCode(((event||window.event).which||(event||window.event).which)));" type="text" name="myinput" id="myinput" />

Note : cross-browser et regex in literal.

2
répondu Fredrick Gauss 2014-02-08 09:13:28

si vous pouvez utiliser HTML5 vous pouvez faire <input type="number" /> Si ce n'est pas le cas, vous devrez le faire par javascript car vous avez dit qu'il n'est pas soumis pour le faire à partir de codebehind.

<input id="numbersOnly" onkeypress='validate()' />

function validate(){
  var returnString;
  var text = document.getElementByID('numbersOnly').value;
  var regex = /[0-9]|\./;
  var anArray = text.split('');
  for(var i=0; i<anArray.length; i++){
   if(!regex.test(anArray[i]))
   {
     anArray[i] = '';
   }
  }
  for(var i=0; i<anArray.length; i++) {
    returnString += anArray[i];
  }
  document.getElementByID('numbersOnly').value = returnString;
}

P. S n'a pas tester le code, mais il devrait être plus ou moins correct si pas vérifier les fautes de frappe :D Vous pourriez vouloir ajouter quelques choses comme quoi faire si la chaîne est nulle ou vide etc. Aussi, vous pouvez rendre cela plus rapide :d

2
répondu Drakoumel 2015-08-17 08:14:18

et si on utilisait <input type="number"...> ?

http://www.w3schools.com/tags/tag_input.asp

aussi, voici une question qui a quelques exemples D'utilisation de Javascript pour la validation .

mise à Jour: liée à une meilleure question (merci alexblum).

1
répondu dan1111 2017-05-23 11:54:46

si pas ensemble d'entiers 0

<input type="text" id="min-value" />

$('#min-value').change(function ()
            {   
                var checkvalue = $('#min-value').val();
                if (checkvalue != parseInt(checkvalue))
                    $('#min-value').val(0);
            });
1
répondu websky 2014-12-12 10:50:20

la réponse acceptée:

function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;
    return true;
}

C'est bon, mais pas parfait. Cela fonctionne pour moi, mais je reçois un avertissement que le if peut être simplifiée.

alors il ressemble à ceci, qui est beaucoup plus joli:

function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode;
    return !(charCode > 31 && (charCode < 48 || charCode > 57));
}

commenterait le post original, mais ma réputation est trop basse pour le faire (vient de créer ce compte).

1
répondu Chris H. 2017-02-14 12:58:45

vous pouvez utiliser la balise <input> avec l'attribut type='number'.

par exemple, vous pouvez utiliser <input type='number' />

ce champ d'entrée ne permet que les valeurs numériques. Vous pouvez également spécifier la valeur minimale et la valeur maximale qui devrait être acceptée par ce domaine.

1
répondu Geeth Chadalawada 2017-05-15 07:19:57

s'il vous Plaît voir mon projet de la croix-navigateur filtre de valeur de la saisie de texte élément sur votre page web à l'aide du langage JavaScript: la Clé d'Entrée du Filtre . Vous pouvez filtrer la valeur comme un nombre entier, un nombre à virgule, ou écrire un filtre personnalisé, tel qu'un numéro de téléphone sur le filtre. Voir un exemple de code d'entrée un nombre entier:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Integer field</h1>
<input id="Integer">
<script>
	CreateIntFilter("Integer", function(event){//onChange event
			inputKeyFilter.RemoveMyTooltip();
			var elementNewInteger = document.getElementById("NewInteger");
			var integer = parseInt(this.value);
			if(inputKeyFilter.isNaN(integer, this)){
				elementNewInteger.innerHTML = "";
				return;
			}
			//elementNewInteger.innerText = integer;//Uncompatible with FireFox
			elementNewInteger.innerHTML = integer;
		}
		
		//onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
		, function(event){ inputKeyFilter.isNaN(parseInt(this.value), this); }
	);
</script>
 New integer: <span id="NewInteger"></span>
</body>
</html>

Voir aussi ma page " Integer field: "de l'exemple de le filtre de la clé d'entrée

1
répondu Andrej 2017-11-25 10:29:39

ajouter à l'intérieur de votre étiquette d'entrée: onkeyup="valeur=valeur.remplacer (/[^\D] / g,")"

1
répondu Naveen Kumar 2018-07-05 04:25:42

Je l'utilise pour les codes postaux, rapide et facile.

<input type="text" id="zip_code" name="zip_code" onkeypress="return event.charCode > 47 && event.charCode < 58;" pattern="[0-9]{5}" required></input>
0
répondu Justin Buser 2013-10-14 19:56:11

lorsque vous utilisez ce code, vous ne pouvez pas utiliser" backspace Button " dans Mozilla Firefox, vous ne pouvez utiliser backspace que dans Chrome 47 & event.charCode < 58; " pattern="[0-9]{5} "required>

0
répondu Wendell Alvarez 2015-05-25 09:57:19

http://www.texotela.co.uk/code/jquery/numeric/ entrée numérique crédits à Leo V Chan pour avoir mentionné ceci et bien sûr TexoTela. avec une page de test.

0
répondu Clark Superman 2015-06-20 08:14:06

pour usage général, vous pouvez avoir la validation JS comme suit:

il fonctionnera pour le clavier numérique et la clé de numéro normal

function isNumberKey(evt){
        var charCode = (evt.which) ? evt.which : event.keyCode

if (charCode < 31 || (charCode >= 48 && charCode <= 57 ) || (charCode >= 96 && charCode <= 105 ))
        return true;
    return false;
}

<input name="someid" type="number" onkeypress="return isNumberKey(event)"/>
0
répondu yasir poongadan 2018-03-27 07:04:39

j'ai utilisé l'expression régulière pour remplacer la valeur d'entrée avec le modèle nécessaire.

var userName = document.querySelector('#numberField');

userName.addEventListener('input', restrictNumber);
function restrictNumber (e) {  
  var newValue = this.value.replace(new RegExp(/[^\d]/,'ig'), "");
  this.value = newValue;
}
  
<input type="text" id="numberField">
0
répondu Shaktish 2018-08-26 10:27:22

il est préférable d'ajouter " + "à la condition REGEX afin d'accepter plusieurs chiffres (pas seulement un chiffre):

<input type="text" name="your_field" pattern="[0-9]+">

-1
répondu Dashko Leonid 2017-07-09 11:12:03