如何限制用户只输入数字并使用javascript在textarea中输入密钥?

时间:2015-05-13 05:42:26

标签: javascript validation

我对Javascript很新。

我要求允许only digits and enter key as input in a textarea box。我还想允许用户paste ONLY digits into the textarea

在StackOverflow上搜索问题后,我发现了以下内容:

function validate(key)
{
//getting key code of pressed key
var keycode = (key.which) ? key.which : key.keyCode;
var phn = document.getElementById('textarea');
//comparing pressed keycodes
if (keycode < 48 || keycode > 57)
{
return false;
}

<div>
<textarea id="textarea" rows="4" cols="50"  onkeypress="return validate(event)" />
</div>

不幸的是,这并不能完全解决我的问题。我想允许用户按enter。如何更改上面的代码以允许“输入”按下以及整数粘贴事件?

3 个答案:

答案 0 :(得分:1)

这是一个非常简单的修改。只需在代码中添加“等于”语句即可。此外,由于您还想处理粘贴事件,因此您需要一个事件监听器和“onPaste”函数。

方法1:使用“onPaste”事件

function validatepaste(e) {
    var pastedata = e.clipboardData.getData('text/plain');
    if (isNaN(pastedata)) {
       e.preventDefault();
       return false;
    }
}

function validate(e) {
    //getting key code of pressed key
    var keycode = (e.which) ? e.which : e.keyCode;
    var phn = document.getElementById('textarea');
    //comparing pressed keycodes
    if ((keycode < 48 || keycode > 57) && keycode !== 13) {
        e.preventDefault();
        return false;
    }
}

这是一个有效的fiddle

以下是"onPaste"事件的一些信息。

方法2:使用“onKeyUp”代替“onPaste”和“onKeyPress”

此方法不太优雅,但如果您的环境不支持“onPaste”

,则该方法有效
function validate(e) {
    var invalidcharacters = /[^0-9]/gi
    var phn = document.getElementById('textarea');
    if (invalidcharacters.test(phn.value)) {
        newstring = phn.value.replace(invalidcharacters, "");
        phn.value = newstring
    }
}

<div>
    <textarea id="textarea" rows="4" cols="50" onKeyUp="validate(event)"></textarea>
</div>

jsfiddle

答案 1 :(得分:0)

你的if语句应该看起来像是什么 if(keycode == 13 || keycode&gt; x1 AND keycode&lt; x2 || keycode&gt; y1 AND keycode&lt; y2) 提供有效的输入 其他 输入无效

其中x是数字的数字范围,y是字符的数字范围。

答案 2 :(得分:0)

您可以仅对数字使用正则表达式替换并返回/换行

function validate(){
    const input = document.getElementById("input")

    const regex = /[^0-1|\n\r]/g

    input.value = input.value.split(regex).join('');
}