ASP.NET RegularExpressionValidator,验证不匹配?

时间:2009-02-14 19:24:34

标签: asp.net regex

有没有办法使用RegularExpressionValidator仅在ValidationExpression不匹配时进行验证?特别是使用PO BOX正则表达式来验证 NOT PO BOX的地址。

谢谢!

5 个答案:

答案 0 :(得分:3)

只需使用NegativeRegularExpressionValidator:)

[ToolboxData("<{0}:NegativeRegularExpressionValidator runat=\"server\" ErrorMessage=\"NegativeRegularExpressionValidator\"></{0}:NegativeRegularExpressionValidator>")]
public class NegativeRegularExpressionValidator : RegularExpressionValidator
{
    protected override bool EvaluateIsValid()
    {
        return base.EvaluateIsValid() == false;
    }
}

答案 1 :(得分:3)

您可以使用negative look-ahead有效地反转正则表达式。

例如,请考虑以下仅匹配数字字符串的正则表达式:

^\d+$

此表达式可以反转如下:

^(?!\d+$).*$

答案 2 :(得分:1)

创建一个正则表达式,用于验证非PO BOX或使用自定义验证器。

答案 3 :(得分:1)

Mike Chaliy的解决方案非常好,但它不会在客户端验证。

我认为你应该使用custom validator control并编写一个javascript函数来验证不是POBox。从正则表达式验证器复制模式,并使用this site编写自己的客户端验证。

答案 4 :(得分:0)

客户端脚本的另一种解决方案:

<asp:TextBox runat="server" ID="MYiD" />


<asp:CustomValidator runat="server" ControlToValidate="MyId" ErrorMessage="Wrong"
    ClientValidationFunction="ClientValidate" />



<asp:Button runat="server" OnClick="OnClick" />

<script language="javascript"> 
function ClientValidate(source, arguments)
{
    var value = arguments.Value;
    var res = value.match('abc');       
    arguments.IsValid = (res == null || res === undefined);
}
</script>