2

顧客番号の形式を確認する必要があります。形式は#####-##(# は 0 ~ 9 の数字、ダッシュは文字どおりのダッシュ) である必要があります。

RegexBuddy を使用して正規表現を作成しました (これにより、テスト文字列を入力して正しいことを確認できます)。私は結局:

\d{5}-\d{2}

これはうまくテストされ、望ましい結果が得られました-「ヒット」:

12345-01

そして一致しない

12345

このツールは、この正規表現をさまざまな言語で使用するためのコードを提供します。これを C# で使用して、文字列全体に対する一致に対して true を返したいと考えています。これにより、以下のコードが得られます。

Regex.IsMatch(c.Bill_To, @"\A\d{5}-\d{2}\Z")

ただし、このコードは12345一致として my を返します!

私は何か間違ったことをした?

4

2 に答える 2

0

私はあなたが抱えている問題を見ていると思います。顧客番号の 1 つが追加のコンテンツと共に文字列に含まれている場合、そのパターンは機能していません。と の両方\Aを指定\Zすると、照合するには、顧客番号が文字列の先頭から始まり、文字列の末尾で終わる必要があることを意味します。オプションが指定された\Aかどうかを無視することを除いて、文字^列の先頭に一致するものと文字列の末尾に一致する\Zものがあります。$MultiLine

このパターンを使用してみてください:\b\d{5}-\d{2}\b

顧客番号が英数字と英数字以外の文字の境界にある場合にのみ一致します。これは、次のLINQPadスクリプトの最後のテスト ケースに示されているように、空白だけで区切られていなくても、顧客番号を見つけることができることを意味します。

const string pattern = @"\b\d{5}-\d{2}\b";

Regex.IsMatch("12345", pattern).Dump(); // no match
Regex.IsMatch("12345-12", pattern).Dump(); // match
Regex.IsMatch("12345-1234", pattern).Dump(); // no match
Regex.IsMatch("word 12345 word", pattern).Dump(); // no match
Regex.IsMatch("word 12345-12 word", pattern).Dump(); // match
Regex.IsMatch("word 12345-1234 word", pattern).Dump(); // no match
Regex.IsMatch("word@12345-12@word", pattern).Dump(); // match
于 2012-06-15T02:05:34.433 に答える