我正在尝试使用此类检查有效的正则表达式:
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;
}
}
}
为了方便 regexp 表达式构造,我使用: 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(重要)
RegExDesigner 使表达式失败,因为表达式new line
末尾有 a。我是说:
^\d{1,3}(?:I|D|R)?
<new line>
但它失败了,正如您在下面的第二个“屏幕截图”中看到的那样。它在 C# 代码中使用了正确的表达式,这个表达式:^\d{1,3}(?:I|D|R)?$
编辑 1
我在这里复制 RegExDesigner 的两个屏幕截图: