JavaScript 仅接受 0 到 255 范围内的数字

标签 javascript

我的要求是验证 IP 范围,我需要创建一个 JavaScript 函数来仅接受数字,并且它必须只允许介于 0 到 255 之间的范围。如果输入的任何内容超出该范围,它必须发出警报消息。

我目前正在使用以下功能

<script language="JavaScript"> 

function allownums(a) 
{ 

if(a <48 ||a > 57) 
alert("invalid") 
else 
alert("vaild") 
} 

</script> 
<input type='text' id='numonly' onkeypress='allownums(event.keycode)'> 

我是 JavaScript 新手,需要一些专家建议来解决我的需求。请推荐我

谢谢 苏迪尔

最佳答案

目前您正在进行测试

(a < 48) || (a > 57)

无效值。所以我会改变这些:

(a < 0 ) || (a > 255)

您可能还需要考虑如何处理像 2.3 这样的非整数输入 - 要么将其四舍五入,要么将其视为无效。

目前,正如 Kelvin Mackay 指出的那样,您正在对按键事件而不是输入值执行验证,因此将 onkeypress 更改为 allownums(this.value)

我建议将警报更改为 div 中的警告,并使用验证来启用/禁用提交按钮,因为弹出窗口在几乎所有情况下都非常烦人。

当输入无效时(按照评论中的要求)清除输入会让用户感到相当烦人;一旦按下某个键添加一个数字并使输入无效,整个输入就会被清除。然而,代码是:

if(!validnum(this.value)) 
    this.value="";

在输入标记中,因此:

<input type='text' id='numonly' 
      onkeyup='if(!validnum(this.value)) this.value="";'>

函数更改为:

function validnum(a) { 
    if(a < 0 || a > 255) 
        return false;
    else 
        return true;
} 

或更简洁地说:

function validnum(a) {
    return ((a >= 0) && (a <= 255));
}

编辑:要警告并清除该框(如果必须):

function validOrPunchTheUser(inputElement) {
    if(!validnum(inputElement.value)) {
        window.alert('badness'); // punch the user
        inputElement.value = ""; // take away their things
    }
}

<input type='text' id='numonly' 
      onkeyup='validOrPunchTheUser(this)'>

但是,阅读其他答案,显然您正在寻求验证八位字节(例如在 IP 地址中)。如果是这样,请在问题中说明这一点,因为它今天经过了我。对于八位字节:

function validateIPKeyPress(event) {
    var key = event.keyCode;
    var currentvalue = event.target.value;
    if(key < 96 || key > 105)
    {
        event.preventDefault();
        window.alert('pain');
        return false;
    }
    else if(currentvalue.length > 2 ||
            (currentvalue.length == 2 &&
             key > 101)) {
        window.alert('of death');
        event.preventDefault();
        event.target.value = event.target.value.substring(0,2);
    }
    else
        return true;
}

使用输入标签:

<input type='text' id='octet'
          onkeydown='validateIPKeyPress(event)'>

除非请不要使用警报。如果您删除警报线,它将默默地阻止无效输入。请注意现在使用 onkeydown 的更改,以便我们可以捕获无效的按键并完全防止值发生更改。如果必须清除输入,请执行 if(!validateIPKeyPress(event)) this.value = "";

关于JavaScript 仅接受 0 到 255 范围内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13413320/

相关文章:

javascript - 覆盖非事件选项卡的 setTimeout 行为

javascript - 在 Meteor 中解析错误的服务器响应

javascript - 把小圆圈包成一个大圆圈

javascript - Maionette AppRouter 的 processAppRoutes 不是函数

javascript - 尝试将 google map api 添加到我的网站

javascript - 如何将 React.Component 放入 CSS 内容属性(在 :before/:after pseudo-elements)?

javascript - 只打印 <div id ="printarea"></div>?

javascript - Jquery 自动选择菜单项。

构建 Sencha/ExtJS 5 项目时出现 java.lang.StackOverflowError

javascript - node/lib 中的 *.js 文件是否在 Node 可执行文件的编译过程中使用?