限制进入文本框的正则表达式

本文关键字:正则表达式 文本 | 更新日期: 2023-09-27 18:14:20

所有

我正在处理一个示例MVC4项目,在这里,我试图通过将输入的文本与正则表达式进行比较来确保用户在输入的文本不等于十进制值(精度为7,小数位数为2(的情况下不能键入任何内容。

但是,即使regex测试失败,我也无法限制用户输入。

请找到下面的代码并告诉我。

@Html.TextBoxFor(m => m.inFormModel[count].Unit, new { @type = "number", 
@step = "0.01", @max = "6", @onkeyup = "return isNumberKey(event, this);"}) 

下面是我的javascript代码

<script type="text/javascript">
function isNumberKey(evt, text) {
    var re = /^('d{0,5}'.'d{0,2}|'d{0,5}|'.'d{0,2})$/;
    var typedValue = parseFloat(text.value);
    typedValue = typedValue.toFixed(2);
    if (re.test(typedValue) == false)
    {
        alert("does not match");
        return false;
    }
    else
    {
        alert("does match");
        return true;
    }
</script>

我知道我们可以从MVC模型注释中进行验证,但我想限制用户进入。

提前感谢。

限制进入文本框的正则表达式

目前还不太清楚您想要实现什么,但我将进行有根据的猜测,并说您希望文本框只接受数值。通过将类型设置为数字,您可以限制非法字符的键盘输入,但您可能担心人们粘贴不好的东西。

无论哪种方式,您都希望使用keydown事件。此外,请注意您粘贴的代码缺少一个右括号。

这里有一个可能的解决方案。这是我很快想出的东西,所以我相信它可以改进,但你会得到大致的想法:

function isNumberKey(evt, text) 
{       
    if(!isAllowedKey(evt.keyCode)) 
    {
        var existingText = (text.value == null || text.value == "") ? "" : text.value;
        var tentativeValue = existingText + evt.key;
        var result = isNumeric(tentativeValue);         
        return result;
    }    
}
function isNumeric(n) 
{
    return !isNaN(parseFloat(n)) && isFinite(n);
}
function isAllowedKey(keyCode)
{
    var allowedKeys = [13,9,37,39, 46, 8, 16]; //Enter, tab, left, right, period, backspace, shift
    for(i = 0; i < allowedKeys.length; i++)
    {
        if(keyCode == allowedKeys[i])
            return true;
    }
    return false;
}

这是一把工作小提琴:

https://jsfiddle.net/970oajaj/35/