大家
我正在研究一个示例MVC4项目,在这里我试图确保用户输入的文本不等于十进制值(精度7和比例2)时通过比较该值与正则表达式无法输入任何内容
但即使正则表达式测试失败,我也无法限制用户进入。
请找到以下代码并告知我们。
@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模型注释验证,但我想限制用户进入。
先谢谢。
答案 0 :(得分:1)
目前还不是很清楚你想要完成什么,但我会采取有根据的猜测并说你希望文本框只接受数值。通过将类型设置为数字,您限制键盘输入非法字符,但您可能担心人们会粘贴不良内容。
无论哪种方式,您都希望使用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;
}
这是一个工作小提琴: