使用RegularExpressionValidator进行IP验证无效

时间:2011-05-16 10:22:04

标签: c# asp.net validation

我尝试使用必需的文件验证程序实现IP地址验证,但它似乎无法显示错误“无法识别的转义序列”

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                            ControlToValidate="txtadapterid" ErrorMessage="Please Enter a Valid IP Address" 
                            Font-Size="Small" 
                            ValidationExpression="^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$"></asp:RegularExpressionValidator>

,代码文件方法是

   private void checkRejex(string strFindin)
{
    Regex myRegex = new Regex("^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$");
    if (myRegex.IsMatch(strFindin))
    {
        lblmsg.Text = "Valid Input";
        lblmsg.ForeColor = Color.Green;
    }
    else
    {
        lblmsg.Text = "Please enter a valid IP Address";
        lblmsg.ForeColor = Color.Red;
    }
}

2 个答案:

答案 0 :(得分:1)

在C#字符串中,反斜杠字符(\)具有特殊含义:它是一个转义字符。你需要使用双反斜杠来消除特殊含义:

"^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|25[0-5]|2[0-4]\\d)$"

或者使用一个逐字字符串文字,前缀为@,其中反斜杠没有特殊含义:

@"^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$"

在逐字字符串中,只需要对双引号(")进行转义(再次使用一对""),因为它们用于分隔字符串。

答案 1 :(得分:1)

而不是带有反斜杠的普通字符串,如下所示:

new Regex("^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$")

你需要使用一个前缀为@的Verbatim字符串,如下所示:

new Regex(@"^(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|25[0-5]|2[0-4]\d)$")

@可以防止反斜杠被解释为字符串的一部分,而是使它们按照您的意图传递给正则表达式。

有关详细信息,请参阅文档中的String literals