6

我正在尝试使用 aRegularExpressionValidator来验证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地方可以确保 1 个或多个字符。

注意 2:我知道我可以只使用MaxLengthTextBox 上的属性,但是此表单也用于编辑现有数据,我不希望它在编辑时简单地截断现有记录。我更喜欢实现一个验证器,这对于编辑现有数据的用户来说很明显,他们需要缩短值,而不是在用户没有意识到的情况下截断表单。

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

4

2 回答 2

16
.{1,25} 

应该将值限制为任何字符 1 到 25 次。不确定这将如何处理 unicode 输入 - 它可能会将多字节字符计为单个字符,因此如果您使用它来限制数据库,请小心

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

于 2012-06-29T14:34:52.400 回答
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>
于 2012-06-29T14:34:19.573 回答