我如何只允许用户在文本框中输入“ - ”和1-9?

时间:2011-03-31 04:09:10

标签: javascript

我如何才允许用户使用onkeyup在文本框中输入“ - ”和1-9?

6 个答案:

答案 0 :(得分:7)

使用jQuery

更新:我使用jQuery看到了其他答案,并假设你有jQuery。请阅读下面的注释,然后参阅下面的非jQuery版本。

此外,我的示例使用了\d,它也允许0(您的问题明确指出1-9)。如果您确实要限制1-9,请将\d1-9交换。

示例1

您可以在keyup上删除无效字符。

$('textarea').keyup(function() {
    $(this).val(function(index, oldVal) {
        return oldVal.replace(/[^\d-]/g, '');
    });
});

jsFiddle

您可能还想绑定其他事件,例如paste

示例2

如果暂时显示的角色让你烦恼,你可以使用它......

$('textarea').keypress(function(event) {
    var keyCode = event.keyCode;
    if ( ! (keyCode >= 48 && keyCode <= 57) && keyCode != 45) {
          event.preventDefault();
    }
});

jsFiddle

示例3

如果这太难阅读(使用键码),你可以这样做......

$('textarea').keypress(function(event) {
    if ( ! String.fromCharCode(event.keyCode).match(/[\d-]/)) {
          event.preventDefault();
    }
});

jsFiddle

此外,当浏览器最终符合规范时,您可以将pattern attribute[\d-]+一起使用。这只会允许0-9-


的JavaScript

示例1

var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
    var textarea = textareas[i];
    textarea.onkeyup = function() {
        textarea.value = textarea.value.replace(/[^\d-]/g, '');
    }
}

jsFiddle

示例2

var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
    var textarea = textareas[i];
    textarea.onkeypress = function(event) {
        var keyCode = event.keyCode || event.which;
        if (!(keyCode >= 48 && keyCode <= 57) && keyCode != 45) {
            event.preventDefault();
        }
    }
}

jsFiddle

示例3

var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
    var textarea = textareas[i];
    textarea.onkeypress = function(event) {
        var keyCode = event.keyCode || event.which;
        if (!String.fromCharCode(event.keyCode).match(/[\d-]/)) {
            event.preventDefault();
        }
    }
}

jsFiddle

答案 1 :(得分:1)

如果您使用的是jQuery:

var isAcceptableKey = /[0-9,-]*/;

$(yourinput).bind('keyup', function(e) {
  if ( e.keyCode.match(isAcceptableKey) {
    // ok
  }
});

正如其中一条评论所指出的那样。只需使用正则表达式。我的正则表达式示例可能不完全正确。

答案 2 :(得分:1)

这是一个解决方案,它阻止所有非数字输入进入文本字段,不包括数字输入顶行和侧面键盘的' - '字符。

html

<input type="text" id="numbersOnly" />

javascript

var input = document.getElementById('numbersOnly');
input.onkeydown = function(e) {
    var k = e.which;
    if (!((k > 47 && k < 58) || (k > 95 && k < 106)) && !(k == 189 || k == 109 || k == 8 || k == 46)) {
        e.preventDefault();
        return false;
    }
};​

答案 3 :(得分:0)

答案 4 :(得分:0)

您的意思是只有正整数还是负整数?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

尝试类似:

if(isNaN(parseInt(textbox.value)))
{
  //this is a validation error.
}

否则类似于:

var validationRegex = RegExp(/[-0-9]+/, "g");
if(!validationRegex.match(textbox.value)
{
  //this is a validation error.
}

Disclamer:我还没有测试过这些。

将它们放入函数

function doKeyUpValidation(textbox)
{

}

和任何标记:

<input type="text" onkeyup="doKeyUpValidation(this)" />

或javascript:

textbox1.onkeyup = function (){...}

答案 5 :(得分:0)

你可以从发布的答案中找到很多方法。

我还有其他方法可以做到这一点。见下面的代码

<强> JS

function isValidChar(char){

    var txt = char;
    var found = false;
    var validChars = "-123456789"; //List of valid characters

    for(j=0;j<txt.length;j++){ //Will look through the value of text
        var c = txt.charAt(j);
        found = false;
        for(x=0;x<validChars.length;x++){
            if(c==validChars.charAt(x)){
                found=true;
                break;
            }
        }
        if(!found){
            //If invalid character is found remove it and return the valid character(s).
            document.getElementById('txtFld').value = char.substring(0, char.length -1);
            break;
        }
    }
}

在你的HTML中:

<input type="text" id="txtFld" onKeyup="isValidChar(this.value);" />

实际上我的上司就是这样做的人。我的观点是通过使用它你可以玩代码并插入你可能需要的其他东西。例如,如果您不熟悉正则表达式,只需键入字符即可。好的缺点是,代码占用了很多空间,而不是使用另一个在这里做的jquery。