1

文字列が ABC123 型かどうかを確認したい。

  • 文字列の長さは 6 でなければなりません。
  • 文字と数字のみを使用できます。
  • 文字列の最初の 3 つの値は文字でなければなりません。

これが私がやったことです。コードを改善するにはどうすればよいですか?

    private void ValidationOfFlightCode(string flightCode)
    {
        if (flightCode.Length == 6)
        {
            bool state = Regex.IsMatch(flightCode, @"^[a-zA-Z0-9]+$");
            if (state)
            {
                bool isLetter = false;
                for (int i = 0; i < 3; i++)
                {
                    isLetter = Char.IsLetter(flightCode, i);
                    if (!isLetter)
                        break;
                }
                if (isLetter)
                {
                    MessageBox.Show(flightCode + ": " + state);
                }
                else
                {
                    MessageBox.Show("The letters must be before the numbers");
                }
            }
            else
            {
                MessageBox.Show("Only letters and numbers are allowed!");
            }
        }
        else
        {
            MessageBox.Show("Flight Code must be 6 characters long");
        }
    }
4

6 に答える 6

5

この正規表現は機能するはずです:

^[a-zA-Z]{3}[a-zA-Z0-9]{3}$
//  ^     ^      ^      ^
//  |     |      |      |
//  |     |      |      +-- Three times
//  |     |      +--------- Letters or digits
//  |     +---------------- Three times
//  +---------------------- Only letters

IsMatchこの正規表現で が返された場合false、さらに検証を行って何が問題なのかを確認できます。

コードを改善するにはどうすればよいですか?

正規表現とエラー メッセージのペアのリストを作成できます。各正規表現は、前のものよりも制限的である必要があります。リストを調べて、コードを正規表現と照合してみてください。一致するものがない場合は、エラー メッセージを出力してループを終了します。たとえば、次のようにできます。

  • ^.{6}$- 「コードには 6 文字が含まれている必要があります」
  • '^[a-zA-Z0-9]{6}$' - "文字は英数字でなければなりません"
  • '^[[a-zA-Z]{3}.{3}$' - "最初の 3 文字は文字でなければなりません"
于 2013-04-21T13:38:07.517 に答える
0

長さチェックの前に、この関数が入力を取得する方法に応じて、null チェックを行うこともできます。

余談ですが、私は個人的にメッセージボックスが煩わしいと感じています。代わりにエラーを表示するテキストボックスの横にある種のラベルを付けた方が良いかもしれません。

于 2013-04-21T13:37:55.427 に答える
0

エラーに関するフィードバックをユーザーに提供する可能性も維持したいということですね。個人的には、上記のような 1 つの正規表現でこれらすべての条件をテストすることになるでしょう。そして、失敗した場合は、他の式の数をテストして、失敗の理由を取得します。私はいくつかのテストの繰り返しよりも正規表現を信頼しています。

于 2013-04-21T13:42:22.863 に答える
0

次のコードを使用して、文字列の最後の 3 文字のみを照合します。

bool isMatch = Regex.IsMatch("flightCode", @"[a-zA-Z0-9]{3}$");
于 2013-04-21T14:41:55.573 に答える