0

私は時間を決定しているテキストボックスを持っています。フォームの読み込み時に、この形式のテキストボックスに時間が入力されるようにコードを書きました 09:09 AM 検証目的で正規表現を使用しているのでこのコード

private bool time()
{
  Regex regex = new Regex("^(1[0-2]|0[1-9]):[0-5][0-9]\040(AM|am|PM|pm)$");
  if (regex.IsMatch(textBox2.Text))
  {
    return true;
  }
  else
  {
    return false;
  }
}

エラーが存在するかどうかを示すボタンがフォームにあり、エラープロバイダーがエラーを表示します。そうでない場合、エラープロバイダーは点滅しません。ボタンクリックのコードは次のとおりです。

問題は、テキストボックスを空白のままにしてボタンをクリックすると、「09:09 pm」の代わりに「09:09 st」を入力してもエラープロバイダーにエラーが表示されないことです。エラーは表示されませんが、私の正規表現ライトです

4

3 に答える 3

2

ロジックが逆になっています。

正規表現が一致する場合はtrue、エラー メッセージを返して設定します。私はそれが逆であるべきだと思います。

また、メソッド (およびフォーム要素) に次のような意味のある名前を付けるようにしてください。

private bool CheckTimeFormat(string value)
{
  Regex regex = new Regex("^(1[0-2]|0[1-9]):[0-5][0-9]\040(AM|am|PM|pm)$");
  return regex.IsMatch(value);
}

private void SetInvalidTimeFormatError()
{
  bool isValidTime = CheckTimeFormat(textBox2.Text);
  if (isValidTime)
  {
    errorProvider1.SetError(textBox2, string.Empty);
  }
  else
  {
    errorProvider1.SetError(textBox2, "invalid format");
  }
}
于 2012-12-26T14:43:38.473 に答える
0

テキストボックスで空白がチェックされていないと思います。time() 関数で、次の条件を指定して確認します。

if(textBox2.Text=="")
return false;

ありがとう。

于 2012-12-26T14:55:55.533 に答える