使用Regex.Match()的C#Regex验证规则

本文关键字:C#Regex 验证 规则 Regex Match 使用 | 更新日期: 2023-09-27 18:19:36

我已经编写了一个正则表达式,它应该使用以下规则验证字符串:

  1. 前四个字符必须是字母数字
  2. 字母字符后面跟着6或7个数值,总长度为10或11

因此,如果字符串有效,它应该是这样的:

CCCCNNNNNN或CCCCNNNN

C是任意字符,N是数字。

我的表达式是:@"^[0-9A-Za-z]{3}[0-9A-Za-z-]'d{0,21}$";

我的正则表达式匹配代码如下:

var cc1 = "FOOBAR"; // should fail.
var cc2 = "AAAA1111111111"; // should succeed
var regex = @"^[0-9A-Za-z]{3}[0-9A-Za-z-]'d{0,21}$";
Match match = Regex.Match( cc1, regex, RegexOptions.IgnoreCase );
if ( cc1 != string.Empty && match.Success )
{
     //"The Number must start with 4 letters and contain no numbers.",
     Error = SeverityType.Error
}

我希望有人能看看我的表情,并就改进提供一些反馈,以产生有效的匹配。

此外,我是否正确使用.Match()?如果Match.Successtrue,那么这是否意味着该字符串有效?

使用Regex.Match()的C#Regex验证规则

后面跟着6到7位小数的4个字母数字字符的正则表达式是:

var regex = @"^'w{4}'d{6,7}$";

请参阅:正则表达式语言-快速参考


Regex.Match方法返回一个Match对象。Success属性指示匹配是否成功。

var match = Regex.Match(input, regex, RegexOptions.IgnoreCase);
if (!match.Success)
{
    // does not match
}

以下代码演示正则表达式的用法:

        var cc1 = "FOOBAR"; // should fail.
        var cc2 = "AAAA1111111"; // should succeed
        var r = new Regex(@"^[0-9a-zA-Z]{4}'d{6,7}$");
        if (!r.IsMatch(cc2))
        {
            Console.WriteLine("cc2 doesn't match");
        }
        if (!r.IsMatch(cc1))
        {
            Console.WriteLine("cc1 doesn't match");
        }

输出为cc1 doesn't match

下面的代码使用一个正则表达式,并检查4种不同的模式来测试它,请参阅下面的输出:

using System;
using System.Text.RegularExpressions;   
public class Program
{
    public static void Main()
    {
        var p1 = "aaaa999999"; 
        CheckMatch(p1);
        p1 = "aaaa9999999";
        CheckMatch(p1);
        p1 = "aaaa99999999";
        CheckMatch(p1);
        p1 = "aaa999999";
        CheckMatch(p1);
    }
    public static void CheckMatch(string p1)
    {
        var reg = new Regex(@"^'w{4}'d{6,7}$");
        if (!reg.IsMatch(p1))
        {
            Console.WriteLine($"{p1} doesn't match");
        }
        else
        {
            Console.WriteLine($"{p1} matches");
        }
    }
}

输出:

aaaa999999匹配
aaaa9999999匹配
aaaa99999999不匹配
aaa999999与
不匹配

将其作为DotNetFiddle

您的条件给出:

  1. 前四个字符必须是字母数字:[A-Za-z'd]{4}
  2. 后面跟着6或7个数值:'d{6,7}

把它放在一起并锚定:

^[A-Za-z'd]{4}'d{6,7}'z

尽管这在一定程度上取决于你如何定义"字母数字"。此外,如果使用忽略大小写标志,则可以从表达式中删除A-Z范围。

尝试以下模式:

@"^[A-za-z'd]{4}'d{6,7}$"