gpt4 book ai didi

c# - 正则表达式和 C# 检查范围数字 + 字符(可选)

转载 作者:行者123 更新时间:2023-11-30 21:05:10 25 4
gpt4 key购买 nike

我正在尝试使用此类检查有效的 Regex 表达式:

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(重要)

RegExDesigner 表达式失败,因为表达式有一个 new line在最后。我的意思是:

^\d{1,3}(?:I|D|R)?
<new line>

但正如您在下面的第二个“屏幕截图”中所见,它失败了。它有 C# 代码中使用的正确表达式,这个:^\d{1,3}(?:I|D|R)?$

编辑 1

我在这里复制了 RegExDesigner 的两个屏幕截图:

First screenshot from RegExDesigner

Second screenshot from RegExDesigner -with Daniel advice-

最佳答案

您不仅需要在开头而且在末尾都需要锚定正则表达式:

@"^\d{1,3}(?:I|D|R)?$"

注意表达式末尾的 $

1000 次匹配,因为前三位匹配表达式。并且最后没有丢失的 anchor ,这是有效的,之后有不匹配的字符。

关于c# - 正则表达式和 C# 检查范围数字 + 字符(可选),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11844371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com