如何验证以及在javascript中限制数字数据的asp.net文本框控件的长度?

时间:2011-11-17 05:14:37

标签: javascript asp.net html

我想通过使用javascript仅用于输入数字来验证asp.net文本框控件。最大数据长度应为3位数。为此,我使用了以下脚本 -

function isNumberKey(evt, obj) {

       var charCode = (evt.which) ? evt.which : event.keyCode
       var txt = obj.value.length;
       if (charCode > 31 && (charCode < 48 || charCode > 57))
           return false;
       else {
           if (txt < 3) {
               return true;
           }
           else {
               return false;
           }
       }
   }

和html代码如下 -

<asp:TextBox ID="txtNoCall" runat="server" onkeypress="javascript:return isNumberKey(event,this);"></asp:TextBox>

验证数字输入。并限制3位数的长度。但问题是,当我按下后退键时,在3位数后,那时它不起作用。

如何解决这个问题?

感谢。

3 个答案:

答案 0 :(得分:3)

使用内置的asp.net验证器会更容易,并为您提供服务器和客户端验证

 <asp:RegularExpressionValidator id="RegularExpressionValidator1" 
                     ControlToValidate="txtNoCall"
                     ValidationExpression="\d{3}"
                     Display="Static"
                     ErrorMessage="Only 3 digits allowed"
                     EnableClientScript="True" 
                     runat="server"/>

注意我没有运行这个,但我有一种感觉,即enableclientscript没有在正则表达式验证器上工作,但msdn文档似乎没有提及它的任何内容,所以也许我错了。

答案 1 :(得分:0)

您可以执行类似

的操作
if ((txt == 3) && (charCode == 8)) {
                obj.value = obj.value.toString().substring(0, txt-1);
            }

这是完整的代码。

function isNumberKey(evt, obj) {
            var LIMIT = 3;           
            var charCode = (evt.which) ? evt.which : event.keyCode           
            var txt = obj.value.length;
            if ((txt == LIMIT) && (charCode == 8)) {
                obj.value = obj.value.toString().substring(0, txt-1);
            }
            if (charCode > 31 && (charCode < 48 || charCode > 57))
                return false;
            else {
                if (txt < LIMIT) {
                    return true;
                }
                else {
                    return false;
                }
            }  
        }

答案 2 :(得分:0)

根据documentation设置TextBox.MaxLength。

如果您需要多线,请查看Specifying maxlength for multiline textbox

如果您尝试自行构建,请确保在测试方案中包含Ctrl-VShift-Ins(大多数解决方案都不能很好地处理这些问题)。

除此之外,您应该构建服务器端以在那里进行验证。完全解决客户端问题是不可能的(因为用户总是手工制作自己的POST,或者禁用javascript)。