web-dev-qa-db-ja.com

Regex.Match()を使用したC#正規表現検証ルール

次のルールを使用して文字列を検証する正規表現を作成しました。

  1. 最初の4文字は英数字でなければなりません。
  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.Success_がtrueの場合、それは文字列が有効であることを意味しますか?

27
nocarrier

4桁の英数字の正規表現は、6〜7桁の10進数です。

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

参照: 正規表現言語-クイックリファレンス


Regex.Match MethodMatch オブジェクトを返します。 Success Property は、一致が成功したかどうかを示します。

var match = Regex.Match(input, regex, RegexOptions.IgnoreCase);

if (!match.Success)
{
    // does not match
}
50
dtb

次のコードは、正規表現の使用方法を示しています。

        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

5
Smi

次のコードは正規表現を使用しており、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. 最初の4文字は英数字でなければなりません[A-Za-z\d]{4}
  2. 6または7の数値が続く\d{6,7}

まとめて固定します。

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

これは、「英数字」の定義方法に少し依存します。また、大文字と小文字を区別しないフラグを使用している場合は、A-Z式の範囲。

3
Qtax

次のパターンを試してください。

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