我有一个确定时间的文本框,在表单加载时我已编写代码,以便时间将填入此格式的文本框中 上午09:09 我正在使用正则表达式进行验证 所以我有这个代码
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''它也没有显示错误,但我的正则表达式是正确的
答案 0 :(得分: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");
}
}
答案 1 :(得分:0)
你真的不需要正则表达式来进行这样的验证。
private bool time() {
DateTime input;
return DateTime.TryParse(textbox2.text, out input);
}
您可能希望使用更高级版本的TryParse
来明确指定您期望的日期时间格式。
有关详细说明,请参阅MSDN:
DateTime.TryParse
DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)
此外,您可能希望为您的功能提供一些有意义的名称,例如IsValidDateTime
。
答案 2 :(得分:0)
我认为文本框中没有选中空白。 在你的time()函数中 通过给出以下条件进行检查:
if(textBox2.Text=="")
return false;
感谢。