RegularExpressionValidator限制输入长度,对字符类型没有限制

时间:2012-06-29 14:29:28

标签: asp.net .net regex validation

我正在尝试使用RegularExpressionValidator来验证TextBox输入长度。我有它的工作,但它只接受字母和数字。我想允许任何字符,唯一的检查是不超过25个字符。

<asp:TextBox ID="MenuLabel" runat="server" />
<asp:RegularExpressionValidator ValidationExpression="^[a-zA-Z0-9]{25}$" ID="MenuLabelVal" runat="server" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel"  />

正则表达式不是我的强项,所以有人可以告诉我如何修改^[a-zA-Z0-9]{25}$以表示任何字符最多25次而不仅仅是字母数字。

注1:我已经有RequiredFieldValidator来确保一个或多个字符。

注意2:我知道我可以只使用MaxLength财产上的文本框,但是这种形式也是编辑现有的资料,我不希望它只是截断现有编辑时的记录。我更愿意实现一个验证器,它使用户可以明显地编辑缩短值所需的现有数据,而不是在没有用户意识的情况下截断表单。

注3:我对其他解决方案(例如自定义验证程序)持开放态度,只要它仅依赖于客户端验证。我没有访问代码隐藏来在服务器上编写自定义验证处理程序。

2 个答案:

答案 0 :(得分:14)

.{1,25} 

应将值限制为任何char 1到25次。不知道这将如何处理unicode输入 - 它可能将多字节字符计为单个字符,因此如果使用此限制数据库时要小心

可能你可能想要^.{1,25}$,但我认为即使是这个简单的版本也应该有效

答案 1 :(得分:4)

如果您使用自定义验证器,那么您可以执行以下操作:

<asp:CustomValidator ID="MenuLabelVal" runat="server" ClientValidationFunction="ValidateFieldLegth" ErrorMessage="Menu Label must be no longer than 25 characters." ControlToValidate="MenuLabel" EnableClientScript="true"  />   

你的javascript会是这样的:

<script>     
    function ValidateFieldLegth(sender, args) {
        var v = document.getElementById('<%=MenuLabel.ClientID%>').value;
        if (v.length > 25) {
            args.IsValid = false;
        }
        else {
            args.IsValid = true;
        }
    }
</script>