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 st'' 而不是 ''09:09 pm'',错误提供程序也不会显示错误,但它不会显示错误但我的正则表达式是赖特

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

你真的不需要正则表达式来进行这样的验证。

private bool time() {
    DateTime input;
    return DateTime.TryParse(textbox2.text, out input);
}

您可能想使用更高级的版本TryParse来明确指定您期望的日期时间格式。

详细说明见 MSDN:

  1. DateTime.TryParse
  2. DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)

此外,您可能想为您的函数提供一些有意义的名称,例如IsValidDateTime.

于 2012-12-26T14:48:48.373 回答
0

我认为文本框中没有选中空白。在您的 time() 函数中,通过给出以下条件进行检查:

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

谢谢。

于 2012-12-26T14:55:55.533 回答