我正在尝试使用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:我对其他解决方案(例如自定义验证程序)持开放态度,只要它仅依赖于客户端验证。我没有访问代码隐藏来在服务器上编写自定义验证处理程序。
答案 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>