Javascript - 验证,仅限数字

时间:2012-05-23 05:05:24

标签: javascript validation numbers

我试图让我的登录表单只验证是否只输入了数字。如果输入只是数字,我可以工作,但是当我在数字后键入任何字符时,它仍然会验证等.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)")
        }
}

14 个答案:

答案 0 :(得分:32)

/^\d+$/匹配。 $表示“行尾”,因此在初始运行数字后的任何非数字字符都会导致匹配失败。

修改

RobG明智地建议更简洁/\D/.test(z)。此操作测试您想要的反转。如果输入具有任何非数字字符,则返回true

只需省略否定!并使用if(/\D/.test(z))

答案 1 :(得分: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;"
/>

这样你就不会允许用户输入任何数字

答案 2 :(得分: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)")
  }

}

答案 3 :(得分:4)

迟到的答案,但可能会帮助某人

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

使用就像

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

ans=isNumber(nn);

if(ans)
{
    //only numbers
}

这个ans是从这里发现的,投票很多

Validate numbers in JavaScript - IsNumeric()

答案 4 :(得分: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!");
        };
    };

答案 5 :(得分:2)

最简单的解决方案。

感谢我的合作伙伴给了我这个答案。

您可以在输入文本框中设置 onkeypress 事件,如下所示:

onkeypress="validate(event)"

然后使用这样的正则表达式:

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

它将扫描并删除与该字段中的数字不同的任何字母或符号。

答案 6 :(得分:1)

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

此功能仅允许文本字段中的数字。

答案 7 :(得分:1)

  

不需要数字输入限制的长代码只需尝试此代码。

     

它也接受有效的int&amp;浮动两个值。

Javascript方法

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方法

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

上述答案适用于大多数常见用例 - 将输入验证为数字。

  

但是允许很少的特殊情况   负数&amp;向用户显示无效的击键   删除它,以下是此类特殊用例的代码段。

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

答案 8 :(得分: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();
      }
  });
}

答案 9 :(得分:1)

我认为我们不接受长结构编程,我们将在每次射击代码中添加以下答案。

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

答案 10 :(得分:1)

function validateNumber(e) {
            const pattern = /^[0-9]$/;

            return pattern.test(e.key )
        }
 
 <input name="username" id="username" onkeypress="return validateNumber(event)">

这种方法不会锁定数字锁数字,箭头,主页,结束按钮等

答案 11 :(得分: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);
}

这将删除密钥释放后的所有非数字。

答案 12 :(得分:0)

//我使用这个jquery它完美的工作,只需将类nosonly添加到任何应该只是数字的文本框中:

$(document).ready(function () {
       $(".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();
               }
           }
       });
   });

答案 13 :(得分:0)

如果您使用的是React,请执行以下操作:

<input
  value={this.state.input}
  placeholder="Enter a number"
  onChange={e => this.setState({ input: e.target.value.replace(/[^0-9]/g, '') })}
/>

<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.21.1/babel.min.js"></script>
<script type="text/babel">
class Demo extends React.Component {
    state = {
      input: '',
    }
    
    onChange = e => {
      let input = e.target.value.replace(/[^0-9]/g, '');
      this.setState({ input });
    }
    
    render() {
        return (
          <div>
            <input
              value={this.state.input}
              placeholder="Enter a number"
              onChange={this.onChange}
            />
            <br />
            <h1>{this.state.input}</h1>
           </div>
        );
    }
}

ReactDOM.render(<Demo />, document.getElementById('root'));
</script>