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

标签 c# regex

我有一个 XML 属性,它有两个可能的值:discardOlddiscardNew(不区分大小写)。

我正在尝试提出一个正则表达式来验证该特定属性的输入:

我尝试了这个:(?i)(discardnew|discardold),但它似乎不起作用。

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

更新

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

[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 也会始终根据 RegEx 检查 DefaultValue。然后它认为它是空字符串,它不会根据您的正则表达式进行验证,因此会抛出异常)。还要考虑将 ^ 和 $ 添加到常规模式,否则它不仅会验证discardnew,还会验证discardnew1、1discardnew 等...

关于c# - XML 属性可能值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193634/

相关文章:

javascript - 匹配可选部分的部分

regex - Django 。 PostgreSQL。 regexp_split_to_table 不工作

php - 将 img 标签包装在 a 标签中,并使用 src 属性作为 href

c# 获取带有 "#"的完整 URL

c# - 在 Dynamics 2011 中检索选项集

c# - 为 asp.net 标签添加样式

c# - Linq toEntity DbQuery 对象严重失败

regex - 去吧,正则表达式 : very challenging regex on Characters

Ruby 正则表达式替换两个数字之间的字符

c# - KeyDown 事件不适用于箭头键、Home、End、PageUp、PageDown 和 silverlight 中的其他类似键