Comment autoriser seulement numérique (0-9) dans HTML inputbox en utilisant jQuery?

je crée une page web où j'ai un champ de texte dans lequel je veux n'autoriser que les caractères numériques comme (0,1,2,3,4,5...9) 0-9.

Comment puis-je faire cela en utilisant jQuery?

816
demandé sur Prashant 2009-06-15 13:22:07

30 réponses

Avoir un oeil à cette plug-in (Fourche de texotela numérique du plugin jquery) . Ce (jStepper) en est une autre.

Ce est un lien si vous souhaitez créer vous-même.

$(document).ready(function() {
    $("#txtboxToFilter").keydown(function (e) {
        // Allow: backspace, delete, tab, escape, enter and .
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
             // Allow: Ctrl+A, Command+A
            (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true)) || 
             // Allow: home, end, left, right, down, up
            (e.keyCode >= 35 && e.keyCode <= 40)) {
                 // let it happen, don't do anything
                 return;
        }
        // Ensure that it is a number and stop the keypress
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    });
});

NOTE: Si votre page Web utilise HTML5, vous pouvez utiliser le construit dans <input type="number"> et utiliser les propriétés min et max pour contrôler la valeur minimale et maximale.


ce qui suit est minimisé et permet également l'utilisation de CTRL + X , Ctrl + c , et Ctrl + V

$(function() {
  $('#staticParent').on('keydown', '#child', function(e){-1!==$.inArray(e.keyCode,[46,8,9,27,13,110])||(/65|67|86|88/.test(e.keyCode)&&(e.ctrlKey===true||e.metaKey===true))&&(!0===e.ctrlKey||!0===e.metaKey)||35<=e.keyCode&&40>=e.keyCode||(e.shiftKey||48>e.keyCode||57<e.keyCode)&&(96>e.keyCode||105<e.keyCode)&&e.preventDefault()});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="staticParent">
	<input id="child" type="textarea" />
</div>
1141
répondu SpYk3HH 2018-06-28 06:59:05

Voici la fonction que j'utilise:

// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 13 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

vous pouvez alors l'attacher à votre commande en faisant:

$("#yourTextBoxName").ForceNumericOnly();
163
répondu Kelsey 2014-03-27 23:13:27

Inline:

<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">

Discrète style (avec jQuery):

$('input[name="number"]').keyup(function(e)
                                {
  if (/\D/g.test(this.value))
  {
    // Filter non-digits from input value.
    this.value = this.value.replace(/\D/g, '');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">
127
répondu Patrick Fisher 2016-08-05 07:18:12

vous pourriez juste utiliser une expression régulière JavaScript simple pour tester les caractères purement numériques:

/^[0-9]+$/.test(input);

Cela renvoie vrai si l'entrée est numérique ou false sinon.

ou pour le code d'événement, utilisation simple ci-dessous:

     // Allow: backspace, delete, tab, escape, enter, ctrl+A and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }

    var charValue = String.fromCharCode(e.keyCode)
        , valid = /^[0-9]+$/.test(charValue);

    if (!valid) {
        e.preventDefault();
    }
99
répondu Umang 2014-06-11 13:04:43

vous pouvez utiliser sur l'événement input comme ceci:

$(document).on("input", ".numeric", function() {
    this.value = this.value.replace(/\D/g,'');
});

mais, quel est ce privilège de code?

  • il fonctionne sur les navigateurs mobiles(keydown et keyCode ont problème).
  • il fonctionne sur le contenu généré AJAX aussi, parce que nous utilisons"on".
  • meilleure performance que keydown, par exemple sur l'événement paste.
66
répondu Hamid Afarinesh Far 2017-11-14 06:20:21

utiliser la fonction JavaScript isNaN ,

if (isNaN($('#inputid').val()))

if (isNaN (document.getElementById ("inputid").val()))

if (isNaN(document.getElementById('inputid').value))

mise à Jour: Et voici un bel article parlant de cela, mais en utilisant jQuery: restreindre L'entrée dans les boîtes de textes HTML à des valeurs numériques

43
répondu Amr Elgarhy 2016-09-22 09:58:24

Court et doux, même si ce ne sera jamais le trouver beaucoup d'attention après 30+ réponses ;)

  $('#number_only').bind('keyup paste', function(){
        this.value = this.value.replace(/[^0-9]/g, '');
  });
40
répondu Rid Iculous 2016-08-10 05:52:41
$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow only backspace and delete
        if ( event.keyCode == 46 || event.keyCode == 8 ) {
            // let it happen, don't do anything
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.keyCode < 48 || event.keyCode > 57 ) {
                event.preventDefault(); 
            }   
        }
    });
});

Source: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values

26
répondu Ivar 2009-06-15 09:26:59

j'utilise ceci dans notre fichier JS commun interne. J'ajoute la classe à toutes les entrées qui ont besoin de ce comportement.

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
26
répondu Mike Chu 2011-02-14 19:47:32

plus simple pour moi est

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});
25
répondu Summved Jain 2012-05-08 14:09:01

pourquoi si compliqué? Vous n'avez même pas besoin de jQuery car il existe un attribut de motif HTML5:

<input type="text" pattern="[0-9]*">

ce qui est cool, c'est qu'il évoque un clavier numérique sur les appareils mobiles, ce qui est bien mieux que d'utiliser jQuery.

19
répondu guest 2014-10-29 19:27:02

vous pouvez faire la même chose en utilisant cette solution très simple

$("input.numbers").keypress(function(event) {
  return /\d/.test(String.fromCharCode(event.keyCode));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numbers" name="field_name" />

j'ai fait référence à ce lien pour la solution. Il fonctionne parfaitement!!!

16
répondu Ganesh Babu 2016-08-05 07:20:46

l'attribut pattern dans HTML5 spécifie une expression régulière contre laquelle la valeur de l'élément est cochée.

  <input  type="text" pattern="[0-9]{1,3}" value="" />

Note: l'attribut pattern fonctionne avec les types d'entrée suivants: texte, Recherche, url, tel, email, et mot de passe.

  • [0-9] peut être remplacé par n'importe quelle condition d'expression régulière.

  • {1,3} représente un minimum de 1 et un maximum de 3 chiffres peut être entré.

14
répondu vickisys 2016-08-03 20:53:21

vous pouvez essayer le HTML5 nombre entrée:

<input type="number" value="0" min="0"> 

pour les navigateurs non conformes il y a Modernizr et Webforms2 fallbacks.

13
répondu Vitalii Fedorenko 2011-12-22 22:36:54

quelque chose d'assez simple en utilisant jQuery.valider

$(document).ready(function() {
    $("#formID").validate({
        rules: {
            field_name: {
                numericOnly:true
            }
        }
    });
});

$.validator.addMethod('numericOnly', function (value) {
       return /^[0-9]+$/.test(value);
}, 'Please only enter numeric values (0-9)');
11
répondu Adrian 2014-04-28 10:10:47

fonction suppressnonumericinput (event) {

    if( !(event.keyCode == 8                                // backspace
        || event.keyCode == 46                              // delete
        || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
        || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
        || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
        ) {
            event.preventDefault();     // Prevent character input
    }
}
8
répondu user261922 2010-07-12 20:38:09

je suis arrivé à une solution très bonne et simple qui n'empêche pas l'utilisateur de choisir le texte ou copier collage comme les autres solutions. jQuery style:)

$("input.inputPhone").keyup(function() {
    var jThis=$(this);
    var notNumber=new RegExp("[^0-9]","g");
    var val=jThis.val();

    //Math before replacing to prevent losing keyboard selection 
    if(val.match(notNumber))
    { jThis.val(val.replace(notNumber,"")); }
}).keyup(); //Trigger on page load to sanitize values set by server
8
répondu Vincent 2013-09-19 21:07:51

vous pouvez utiliser cette fonction JavaScript:

function maskInput(e) {
    //check if we have "e" or "window.event" and use them as "event"
        //Firefox doesn't have window.event 
    var event = e || window.event 

    var key_code = event.keyCode;
    var oElement = e ? e.target : window.event.srcElement;
    if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
        if ((key_code > 47 && key_code < 58) ||
            (key_code > 95 && key_code < 106)) {

            if (key_code > 95)
                 key_code -= (95-47);
            oElement.value = oElement.value;
        } else if(key_code == 8) {
            oElement.value = oElement.value;
        } else if(key_code != 9) {
            event.returnValue = false;
        }
    }
}

et vous pouvez le lier à votre boîte de texte comme ceci:

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

je l'utilise au-dessus de la production, et il fonctionne parfaitement, et il est cross-browser. En outre, il ne dépend pas de jQuery, de sorte que vous pouvez le lier à votre boîte aux lettres avec JavaScript en ligne:

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
8
répondu karim79 2013-11-19 23:59:42

je pense que ça va aider tout le monde

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })
7
répondu Asif 2012-04-05 07:18:09

Voici une solution rapide que j'ai créée il y a quelque temps. vous pouvez lire plus à ce sujet dans mon article:

http://ajax911.com/numbers-numeric-field-jquery /

$("#textfield").bind("keyup paste", function(){
    setTimeout(jQuery.proxy(function() {
        this.val(this.val().replace(/[^0-9]/g, ''));
    }, $(this)), 0);
});
6
répondu Dima 2012-05-24 20:05:46

Voici une réponse qui utilise jquery UI Widget factory. Vous pouvez personnaliser les caractères autorisés facilement.

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

qui permettrait des nombres, des signes numériques et des montants en dollars.

$.widget('themex.numberOnly', {
    options: {
        valid : "0123456789",
        allow : [46,8,9,27,13,35,39],
        ctrl : [65],
        alt : [],
        extra : []
    },
    _create: function() {
        var self = this;

        self.element.keypress(function(event){
            if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
            {
                return;
            }
            if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
            {
                return;
            }
            if(event.altKey && self._codeInArray(event,self.options.alt))
            {
                return;
            }
            if(!event.shiftKey && !event.altKey && !event.ctrlKey)
            {
                if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
                {
                    return;
                }
            }
            event.preventDefault(); 
        });
    },

    _codeInArray : function(event,codes) {
        for(code in codes)
        {
            if(event.keyCode == codes[code])
            {
                return true;
            }
        }
        return false;
    }
});
6
répondu Mathew Foscarini 2013-03-25 20:15:24

cela semble incassable.

// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
    this.value = this.value.replace(/[^0-9\.]+/g, '');
    if (this.value < 1) this.value = 0;
});

// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
    return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
6
répondu Jonathan 2013-06-26 12:52:46

je voulais aider un peu, et j'ai fait ma version, la fonction onlyNumbers ...

function onlyNumbers(e){
    var keynum;
    var keychar;

    if(window.event){  //IE
        keynum = e.keyCode;
    }
    if(e.which){ //Netscape/Firefox/Opera
        keynum = e.which;
    }
    if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
       (event.keyCode >= 96 && event.keyCode <= 105)))return true;

    if(keynum == 110 || keynum == 190){
        var checkdot=document.getElementById('price').value;
        var i=0;
        for(i=0;i<checkdot.length;i++){
            if(checkdot[i]=='.')return false;
        }
        if(checkdot.length==0)document.getElementById('price').value='0';
        return true;
    }
    keychar = String.fromCharCode(keynum);

    return !isNaN(keychar);
}

il suffit d'ajouter la balise input"...entrée. .. id="prix" onkeydown="return onlyNumbers(event)"..."et c'est fait ;)

5
répondu crash 2011-07-29 02:32:30

j'ai écrit le mien basé sur le post de @user261922 ci-dessus, légèrement modifié de sorte que vous pouvez sélectionner Tout, onglet et peut gérer plusieurs champs" nombre seulement " sur la même page.

var prevKey = -1, prevControl = '';
$(document).ready(function () {
    $(".OnlyNumbers").keydown(function (event) {
        if (!(event.keyCode == 8                                // backspace
            || event.keyCode == 9                               // tab
            || event.keyCode == 17                              // ctrl
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105)    // number on keypad
            || (event.keyCode == 65 && prevKey == 17 && prevControl == event.currentTarget.id))          // ctrl + a, on same control
        ) {
            event.preventDefault();     // Prevent character input
        }
        else {
            prevKey = event.keyCode;
            prevControl = event.currentTarget.id;
        }
    });
});
5
répondu jamesbar2 2011-08-09 20:35:21

je voudrais aussi répondre :)

    $('.justNum').keydown(function(event){
        var kc, num, rt = false;
        kc = event.keyCode;
        if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
        return rt;
    })
    .bind('blur', function(){
        num = parseInt($(this).val());
        num = isNaN(num) ? '' : num;
        if(num && num < 0) num = num*-1;
        $(this).val(num);
    });

C'est ça...seulement des chiffres. :) Presque cela peut fonctionner juste avec le 'flou', mais...

5
répondu Pedro Soares 2012-01-19 00:24:09

vous voudriez autoriser tab:

$("#txtboxToFilter").keydown(function(event) {
    // Allow only backspace and delete
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
        // let it happen, don't do anything
    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
5
répondu ngwanevic 2012-11-10 07:27:24

la façon Simple de vérifier que la valeur enter est numérique est:

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
5
répondu Pragnesh Rupapara 2013-10-22 06:59:05

il suffit d'appliquer cette méthode dans Jquery et vous pouvez valider votre boîte de texte pour n'accepter que le numéro.

function IsNumberKeyWithoutDecimal(element) {    
var value = $(element).val();
var regExp = "^\d+$";
return value.match(regExp); 
}

d'Essayer cette solution ici

5
répondu Jitender Kumar 2014-01-29 05:29:01

vous pouvez essayer L'entrée de numéro HTML5:

<input type="number" placeholder="enter the number" min="0" max="9">

cet élément de la balise d'entrée n'aurait désormais qu'une valeur comprise entre 0 et 9 comme l'attribut min est défini à 0 et l'attribut max est défini à 9.

pour plus d'information sur la visite http://www.w3schools.com/html/html_form_input_types.asp

5
répondu kkk 2015-04-14 17:05:35

besoin de s'assurer que vous avez le clavier numérique et la touche de tabulation fonctionne trop

 // Allow only backspace and delete
            if (event.keyCode == 46 || event.keyCode == 8  || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                // Ensure that it is a number and stop the keypress
                if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {

                }
                else {
                    event.preventDefault();
                }
            }
4
répondu Coppermill 2009-10-16 07:13:21