Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML属性的可能值的正则表达式_C#_Regex - Fatal编程技术网

C# XML属性的可能值的正则表达式

C# XML属性的可能值的正则表达式,c#,regex,C#,Regex,我有一个XML属性,它有两个可能的值:DiscardorOld和DiscardorNew不区分大小写 我正在尝试使用正则表达式来验证该特定属性的输入: 我试过这个:?idiscardnew |丢弃旧的,但似乎不起作用 任何帮助都将不胜感激!谢谢 更新 这是我用来执行正则表达式检查的代码: [ConfigurationProperty("mode", IsRequired = true)] [RegexStringValidator("(?i)(discardnew|discardold)")]

我有一个XML属性,它有两个可能的值:DiscardorOld和DiscardorNew不区分大小写

我正在尝试使用正则表达式来验证该特定属性的输入:

我试过这个:?idiscardnew |丢弃旧的,但似乎不起作用

任何帮助都将不胜感激!谢谢

更新

这是我用来执行正则表达式检查的代码:

[ConfigurationProperty("mode", IsRequired = true)]
[RegexStringValidator("(?i)(discardnew|discardold)")]
public string Mode
{
    get { return (string)base["mode"]; }
    set { base["mode"] = value; }
}
以下是在XML中声明属性的方式:

<eventQueue mode="discardNew" />

我尝试了这一点,但它似乎正常工作。以下所有IsMatch返回true:

Regex R = new Regex("(?i)(discardnew|discardold)");
bool i1 = R.IsMatch("DiscardOld");
bool i2 = R.IsMatch("discardOld");
bool i3 = R.IsMatch("discardOLD");
bool i4 = R.IsMatch("discardneW");
bool i5 = R.IsMatch("Discardnew");
bool i6 = R.IsMatch("dISCARDnew");
问题可能在别的地方

更新: 这对我来说很有用:

[ConfigurationProperty("mode", IsRequired = true, DefaultValue = "discardnew")]
[RegexStringValidator("^(?i)(discardnew|discardold)$")]
public string Mode
{
    get { return (string)base["mode"]; }
    set { base["mode"] = value; }
}

我刚刚将DefaultValue=discardnew添加到ConfigurationProperty。ASP.NET总是根据正则表达式检查DefaultValue,即使您没有设置它。然后它认为它是空字符串,它不会根据正则表达式进行验证,所以它会抛出异常。还考虑Addie^和$到常规模式,否则它不仅验证DeCdBeNeX,还将验证DeCordNe1、1DISCARDION等。

< P>我尝试了这一点,并且它似乎正确地工作在以下所有匹配返回true:

Regex R = new Regex("(?i)(discardnew|discardold)");
bool i1 = R.IsMatch("DiscardOld");
bool i2 = R.IsMatch("discardOld");
bool i3 = R.IsMatch("discardOLD");
bool i4 = R.IsMatch("discardneW");
bool i5 = R.IsMatch("Discardnew");
bool i6 = R.IsMatch("dISCARDnew");
问题可能在别的地方

更新: 这对我来说很有用:

[ConfigurationProperty("mode", IsRequired = true, DefaultValue = "discardnew")]
[RegexStringValidator("^(?i)(discardnew|discardold)$")]
public string Mode
{
    get { return (string)base["mode"]; }
    set { base["mode"] = value; }
}

我刚刚将DefaultValue=discardnew添加到ConfigurationProperty。ASP.NET总是根据正则表达式检查DefaultValue,即使您没有设置它。然后它认为它是空字符串,它不会根据正则表达式进行验证,所以它会抛出异常。也可以考虑Addie^和$到常规模式,否则它不仅会验证DeCdBeNeX,还将验证DeBeCudie1、1DeCaseNoW等.

?我应该为您工作,但是您也可以尝试将枚举值传递给匹配方法,例如,

,我应该为您工作,但是,您也可以尝试将枚举值传递给Match方法,例如。

当您说XML属性时,您是指XML属性,例如type=discardOld,还是指XML文本,例如discardOld?表达式本身很好。向我们展示您正在使用的代码,因为问题可能在于您如何使用它。当您说“XML属性”时,您是指XML属性,例如type=DiscardorOld,还是指XML文本,例如DiscardorOld?表达式本身很好。向我们展示您正在使用的代码,因为问题可能在于您如何使用它。您似乎在这方面是正确的。。。我把问题和代码混在一起,似乎找不到我错的地方…你在这方面似乎是对的。。。我把问题和代码混在一起,似乎找不到我错的地方。。。