【问题标题】:C# Regex Validation Rule using Regex.Match()使用 Regex.Match() 的 C# 正则表达式验证规则
【发布时间】:2012-01-06 21:35:22
【问题描述】:

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

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

因此,如果字符串有效,则该字符串应如下所示:

CCCCNNNNNN 或 CCCCNNNNNNN

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,那么这是否意味着该字符串有效?

【问题讨论】:

    标签: c# regex validation


    【解决方案1】:

    4 个字母数字字符后跟 6 到 7 个十进制数字的正则表达式是:

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

    见:Regular Expression Language - Quick Reference


    Regex.Match Method 返回一个 Match 对象。 Success Property 表示匹配是否成功。

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

    【讨论】:

      【解决方案2】:

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

              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

      【讨论】:

        【解决方案3】:

        以下代码使用正则表达式并检查 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

        【讨论】:

          【解决方案4】:

          你的条件给出:

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

          把它放在一起并锚定它:

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

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

          【讨论】:

            【解决方案5】:

            尝试以下模式:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-02-10
              • 1970-01-01
              • 1970-01-01
              • 2011-08-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多