我正在尝试将正则表达式验证程序用于数字ID字段。该字段必须是任何数字的必填字段。目前,我正在使用:
="\d{1,}"
这不应该这样,用户必须至少输入1位数?如果我按下提交按钮并且字段为空,则会通过验证并回发..但如果我输入非数字字符,则错误很好。如果我想要零次或多次出现,我会使用:="(\d{1,})?"
为什么这不起作用?我是否需要将其与必填字段验证器结合使用?这会吮吸><
答案 0 :(得分:4)
确保将属性ValidateEmptyText
设置为true
,否则CustomValidator
将不会触发空文本。
编辑:您可以将{javascript函数附加到CustomValidator
来完成此操作,因为我认为RegularExpressionValidator
不会触发空控件。我已经创建了一个基本的例子来说明解决方案:
<script type="text/javascript">
function CheckMyText(sender, args) {
var compare = RegExp("\\d{1,}");
args.IsValid = compare.test(args.Value);
return;
}
</script>
<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<asp:Button ID="btnTest" runat="server" Text="Test" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Error!"
ControlToValidate="txtTest" ValidateEmptyText="true"
ClientValidationFunction="CheckMyText"></asp:CustomValidator>
我测试了它,似乎有效。如果您需要进一步的帮助,请发表评论。
答案 1 :(得分:1)
您仍然需要使用RequiredFieldValidator。
答案 2 :(得分:0)
我不确定用户输入ID的位置,但如果输入字段是TextBox控件,为什么不使用这样的内容:
if (tbID.Text.Length != 0)
{
//Logic goes here
}
答案 3 :(得分:0)
当用户点击提交时,您需要确保不仅捕获空字符串,下面是查找任何空格(标签,空格等)的正则表达式+匹配字符不是数字(0-9)< / p>
Dim FoundMatch As Boolean
Try
FoundMatch = Regex.IsMatch(SubjectString, "\Dm/rld$/\s", RegexOptions.IgnoreCase Or RegexOptions.Multiline)
'put your code here
Catch ex As ArgumentException
'syntax error in regular expression
End Try
我相信你需要在你的页面上使用回发,如果你决定使用RequiredFieldValidator你也可以使用上面的正则表达式
H个
答案 4 :(得分:0)
如果某人未使用CustomValidator
,则您可以为同一控件设置RequiredFieldValidator
和RegularExpressionValidator
。在此处找到此解决方案:http://forums.asp.net/t/1230931.aspx。通常,这会导致错误消息被替换为第二个验证器,但有一种方法可以解决这个问题。您只需为两个验证器将Display
属性设置为dynamic
即可。现在,两个验证器的错误消息都显示在同一位置。示例代码:
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ErrorMessage="ErrorMsg" ControlToValidate="controlID"
ValidationExpression="regexExpression"
Display="Dynamic"></asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server"
ErrorMessage="ErrorMsg" ControlToValidate="controlID"
Display="Dynamic"></asp:RequiredFieldValidator>`