Javascript - проверка, только цифры

Я пытаюсь, чтобы моя форма для входа была проверена, только если были введены только цифры. Я могу, чтобы это работало, если ввод состоит только из цифр, но когда я набираю любые символы после числа, он все равно будет проверяться и т. Д. 12akf будет работать. 1 утра будет работать. Как я могу пройти это?

Часть логина

<form name="myForm">
    <label for="firstname">Age: </label>
    <input name="num" type="text" id="username" size="1">
    <input type="submit" value="Login" onclick="return validateForm()">

function validateForm()
{

    var z = document.forms["myForm"]["num"].value;
    if(!z.match(/^\d+/))
        {
        alert("Please only enter numeric characters only for your Age! (Allowed input:0-9)")
        }
}
 RobG10 дек. 2014 г., 22:10
Также лучше поместить слушателя в форму, так как она может быть отправлена без нажатия кнопки отправки.
 RobG23 мая 2012 г., 08:49
Вы лучше использоватьtest, который возвращает логическое значение:if (/\D/.test(z)) {/* non-digit found */}.

Ответы на вопрос(12)

function ValidateNumberOnly()
{
if ((event.keyCode < 48 || event.keyCode > 57)) 
{
   event.returnValue = false;
}
}

 03 мая 2017 г., 08:34
но не может ввести десятичную, используя это!

ode.

It also accepts valid int & float both values.

Javascript Approach

onload =function(){ 
  var ele = document.querySelectorAll('.number-only')[0];
  ele.onkeypress = function(e) {
     if(isNaN(this.value+""+String.fromCharCode(e.charCode)))
        return false;
  }
  ele.onpaste = function(e){
     e.preventDefault();
  }
}
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />

jQuery Approach

$(function(){

  $('.number-only').keypress(function(e) {
	if(isNaN(this.value+""+String.fromCharCode(e.charCode))) return false;
  })
  .on("cut copy paste",function(e){
	e.preventDefault();
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />

Приведенные выше ответы предназначены для наиболее распространенного варианта использования - проверки ввода в виде числа.

But to allow few special cases like negative numbers & showing the invalid keystrokes to user before removing it, so below is the code snippet for such special use cases.

$(function(){
      
  $('.number-only').keyup(function(e) {
        if(this.value!='-')
          while(isNaN(this.value))
            this.value = this.value.split('').reverse().join('').replace(/[\D]/i,'')
                                   .split('').reverse().join('');
    })
    .on("cut copy paste",function(e){
    	e.preventDefault();
    });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />

 19 нояб. 2016 г., 17:45
Спасибо @Elenasys .. конечно .. спасибо за распространение ответа на испанскую аудиторию.
 13 февр. 2016 г., 16:36
Работает во всех браузерах, протестировано и проверено.
 11 февр. 2016 г., 19:06
не работает в Firefox
 19 нояб. 2016 г., 02:34
Привет @vinayakj Я взял ссылку на этот ответ для StackOverflow на испанском языке, кстати отличный ответ!es.stackoverflow.com/a/34744/95

но почему бы просто не убедиться, что это число, прежде чем пытаться что-то с ним сделать?

function addemup() {
var n1 = document.getElementById("num1");
var n2 = document.getElementById("num2");
sum = Number(n1.value) + Number(n2.value);
    if(Number(sum)) {
        alert(sum);
        } else {
            alert("Numbers only, please!");
        };
    };
 23 сент. 2014 г., 06:42
это требует больше вычислений, чем регулярное выражение.
Решение Вопроса

/^\d+$/. $ означает «конец строки», поэтому любые нецифровые символы после начального набора цифр приведут к сбою сопоставления.

Edit:

RobG мудро предлагает более краткий/\D/.test(z), Эта операция проверяет обратное тому, что вы хотите. Возвращаетсяtrue если вход имеетany нечисловые символы.

Просто опустите отрицание!  и использоватьif(/\D/.test(z)).

 Anthony Do23 мая 2012 г., 07:15
это не работает. Теперь он просто принимает проверку, даже если это не цифры. я изменил его на: if (! z.match (/ ^ \ d + $ /. $))
 Anthony Do23 мая 2012 г., 07:27
извините, код был верным. Я также добавил. $ на него.
 20 нояб. 2018 г., 06:06
Вы не нуждаетесь в! при использовании /\d/.test(z)
 23 мая 2012 г., 07:22
Подожди, ты не получаешьz.match(/^\d+$/) работать? Он отлично работает для меня. Финал.$ в коде из вашего комментария ничего не происходит - этот период и знак доллара находятся за пределами шаблона регулярного выражения и интерпретируются как символы-модификаторы регулярного выражения (например,g для глобального илиi без учета регистра).
 23 мая 2012 г., 08:51
@ apsillers & # x2014; рассмотрим вместо/\D/.test(z)короче и проще.

var input = document.querySelector('form[name=myForm] #username');

input.onkeyup = function() {
    var patterns = /[^0-9]/g;
    var caretPos = this.selectionStart;

    this.value = input.value.replace(patterns, '');
    this.setSelectionRange(caretPos, caretPos);
}

Это удалит все не-цифры после того, как ключ отпущен.

что мы не принимаем длинное структурное программирование, мы будем добавлять каждый раз код выстрела, смотрите ответ ниже.

<input type="text" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" >

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Использование будет как

nn=document.forms["myForm"]["num"].value;

ans=isNumber(nn);

if(ans)
{
    //only numbers
}

Этот ответ был найден здесь с огромным голосованием

Проверять числа в JavaScript - IsNumeric ()

var elem = document.getElementsByClassName("number-validation"); //use the CLASS in your input field.
for (i = 0; i < elem.length; i++) {
   elem[i].addEventListener('keypress', function(event){
      var keys = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 0];
      var validIndex = keys.indexOf(event.charCode);
      if(validIndex == -1){
         event.preventDefault();
      }
  });
}

// Я использую этот jquery, он отлично работает, просто добавьте класс nosonly в любое текстовое поле, которое должно содержать только цифры:

$(document)..nosonly").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) {
              alert("Only Numbers Allowed"),event.preventDefault();
               }
           }
       });
   });
 19 окт. 2018 г., 13:16
Он принимает специальные символы (! @ # $%, ....), пожалуйста, проверьте ...

Спасибо моему партнеру, который дал мне этот ответ.

Вы можете установитьonkeypress событие наinput текстовое поле, как это:

onkeypress="validate(event)"

а затем используйте регулярные выражения, как это:

function validate(evt){
     evt.value = evt.value.replace(/[^0-9]/g,"");
}

Он будет сканировать и удалять любые буквы или знаки, отличные от числа в поле.

 13 июн. 2016 г., 11:02
.replace (/ [^ 0-9] / g, "") - лучшее и простое решение, которое я нашел. Мне нужны были даже запятые и валютная точка, поэтому .replace (/ [^ 0-9,.] / G, & quot;) был для меня точным совпадением.
 12 мая 2016 г., 17:00
Это все еще работает, когда текст вставляется в текстовое поле ввода?

чтобы принимать только цифры. Будут приняты цифры, такие как 123123123.41212313.

<input type="text" 
onkeypress="if ( isNaN(this.value + String.fromCharCode(event.keyCode) )) return false;"
/>

и это не будет принимать ввод точки (.), поэтому он будет принимать только целые числа

<input type="text" 
onkeypress="if ( isNaN( String.fromCharCode(event.keyCode) )) return false;"
/>

таким образом, вы не позволите пользователю вводить что-либо, кроме цифр

 08 дек. 2016 г., 04:51
Вы можете подтвердить на другом даже такую форму отправки
 28 янв. 2016 г., 11:49
при вставке текста это не проверяет

function validateForm(){

  var z = document.forms["myForm"]["num"].value;

  if(!/^[0-9]+$/.test(z)){
    alert("Please only enter numeric characters only for your Age! (Allowed input:0-9)")
  }

}

Ваш ответ на вопрос