41

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

14 回答 14

40

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

编辑:

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

简单地省略否定! 和使用if(/\D/.test(z))

于 2012-05-23T05:06:19.497 回答
25

这里是如何验证输入只接受数字这将接受像 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;"
/>

这样,您将不允许用户输入除数字以外的任何内容

于 2012-10-17T05:57:23.927 回答
15

这个对我有用:

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

}
于 2015-07-03T00:02:43.673 回答
7

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

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

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

于 2020-04-07T08:52:43.893 回答
5

迟到的答案,但这可能会对某人有所帮助

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

使用会像

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

ans=isNumber(nn);

if(ans)
{
    //only numbers
}

这个答案是从这里以巨大的票数找到的

在 JavaScript 中验证数字 - IsNumeric()

于 2014-02-16T05:45:35.303 回答
3

最简单的解决方案。

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

您可以像这样在输入文本框上设置onkeypress事件:

onkeypress="validate(event)"

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

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

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

于 2014-06-13T00:22:42.787 回答
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!");
        };
    };
于 2013-10-24T06:22:17.213 回答
2
function ValidateNumberOnly()
{
if ((event.keyCode < 48 || event.keyCode > 57)) 
{
   event.returnValue = false;
}
}

此函数将只允许文本字段中的数字。

于 2015-03-26T06:25:17.670 回答
2

无需输入限制的长代码,只需尝试此代码即可。

它还接受有效的 int 和 float 两个值。

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

以上答案适用于最常见的用例 - 将输入验证为数字。

但是为了允许一些特殊情况,如负数并在删除之前向用户显示无效的击键,所以下面是这种特殊用例的代码片段。

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

于 2015-06-27T16:49:58.870 回答
2

我认为我们不接受长结构编程,我们将添加每次拍摄代码,请参见下面的答案。

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

于 2018-12-12T06:18:11.080 回答
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();
      }
  });
}
于 2018-06-27T10:38:59.183 回答
1

如果您使用的是 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>

于 2019-11-26T17:27:31.153 回答
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);
}

这将在释放键后删除所有非数字。

于 2013-05-19T11:10:37.320 回答
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();
               }
           }
       });
   });
于 2016-11-17T16:16:58.967 回答