2

2 つの可能な値を持つ XML プロパティがあります: discardOldand discardNew(大文字と小文字は区別されません)。

その特定のプロパティの入力を検証するための正規表現を考え出そうとしています:

私はこれを試しました:(?i)(discardnew|discardold)しかし、うまくいかないようです。

どんな助けでも大歓迎です!ありがとう!

アップデート

これは、RegEx チェックを実行するために使用するコードです。

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

XML でのプロパティの宣言方法は次のとおりです。

<eventQueue mode="discardNew" />
4

2 に答える 2

4

これを試してみたところ、正しく動作しているようです (以下のすべての 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 を RegEx に対してチェックします。次に、それは空の文字列であると見なされ、正規表現に対して検証されないため、例外がスローされます)。通常のパターンに ^ と $ を追加することも検討してください。そうしないと、discardnew だけでなく、discardnew1、1discardnew なども検証されます。

于 2012-04-17T15:15:44.390 に答える
0

(?i) はうまくいくはずですが、たとえば、RegexOptions.IgnoreCase列挙値を Match() メソッドに渡すこともできます。

于 2012-04-17T15:17:45.700 に答える