Вопрос по javascript, validation – Javascript - проверка, только цифры

26

Я пытаюсь, чтобы моя форма для входа была проверена, только если были введены только цифры. Я могу, чтобы это работало, если ввод состоит только из цифр, но когда я набираю любые символы после числа, он все равно будет проверяться и т. Д. 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)")
        }
}
Вы лучше использоватьtest, который возвращает логическое значение:if (/\D/.test(z)) {/* non-digit found */}. RobG
Также лучше поместить слушателя в форму, так как она может быть отправлена без нажатия кнопки отправки. RobG

Ваш Ответ

12   ответов
30

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

Edit:

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

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

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

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);
}

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

1

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

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

4

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

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

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

ans=isNumber(nn);

if(ans)
{
    //only numbers
}

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

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

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

но не может ввести десятичную, используя это!
1
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();
      }
  });
}
0

// Я использую этот 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();
               }
           }
       });
   });
Он принимает специальные символы (! @ # $%, ....), пожалуйста, проверьте ...
2

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

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

onkeypress="validate(event)"

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

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

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

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

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 />

Спасибо @Elenasys .. конечно .. спасибо за распространение ответа на испанскую аудиторию.
не работает в Firefox
Привет @vinayakj Я взял ссылку на этот ответ для StackOverflow на испанском языке, кстати отличный ответ!es.stackoverflow.com/a/34744/95
Работает во всех браузерах, протестировано и проверено.
20

чтобы принимать только цифры. Будут приняты цифры, такие как 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;"
/>

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

Вы можете подтвердить на другом даже такую форму отправки
при вставке текста это не проверяет
7

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)")
  }

}
2

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

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!");
        };
    };
это требует больше вычислений, чем регулярное выражение.

Похожие вопросы