このクラスで、有効な正規表現をチェックしようとしています。
using System.Text.RegularExpressions;
namespace Checking
{
public static class CheckALF
{
public static bool IsValueOk(string value)
{
Regex isValidNumber = new Regex(@"^\d{1,3}(?:I|D|R)?", RegexOptions.IgnoreCase);
if (isValidNumber.IsMatch(value)) {
return true;
}
return false;
}
}
}
正規表現式の構成を容易にするために、私は次を使用します: http ://www.radsoftware.com.au/regexdesigner/
しかし、私は'regexdesigner'で実行されているが、C#.net 4では実行されていない多くのことを試したので、これには少し迷っています。
ここに、テストが失敗したテストコード(部分的にのみ)を配置しました。
using Checking;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestCheck
{
[TestClass]
public class TestCheckALF
{
[TestMethod]
public void Check_IsValid_OnlyNumbers_LessThan3Digits()
{
Assert.IsTrue(CheckALF.IsValueOk("40"));
Assert.IsTrue(CheckALF.IsValueOk("0"));
Assert.IsTrue(CheckALF.IsValueOk("999"));
}
[TestMethod]
public void Check_IsValid_OnlyNumbersMoreThan3Digits()
{
Assert.IsFalse(CheckALF.IsValueOk("1000")); // ERROR.......
}
[TestMethod]
public void Check_IsValid_NumbersAndR_LessThan3Digits()
{
Assert.IsTrue(CheckALF.IsValueOk("40R"));
Assert.IsTrue(CheckALF.IsValueOk("0R"));
Assert.IsTrue(CheckALF.IsValueOk("999R"));
}
[TestMethod]
public void Check_IsValid_NumbersAndL_LessThan3Digits()
{
Assert.IsTrue(CheckALF.IsValueOk("40I"));
Assert.IsTrue(CheckALF.IsValueOk("0i"));
Assert.IsTrue(CheckALF.IsValueOk("999I"));
}
}
}
前もって感謝します。
編集2(重要)
式の最後にaがあるため、RegExDesignerは式に失敗していnew line
ました。つまり:
^ \ d {1,3}(?: I | D | R)?
<new line>
しかし、下の2番目の「スクリーンショット」でわかるように失敗します。そして、C#コードで使用されている正しい式があります。これは次のとおりです。^ \ d {1,3}(?:I | D | R)?$
編集1
RegExDesignerから2つのスクリーンショットをここにコピーします。