2011-06-19 43 views
1

而不是使用if(numberEntered < 1 || numberEntered> 24),是否有可能使用正则表达式来检查该字段是否采用24小时制格式,例如, 23:00。C# - 使用正则表达式与TextBox.Validating

private void textBox4_Validating(object sender, CancelEventArgs e) 
{ 
    { 
     int numberEntered; 

     if (int.TryParse(textBox4.Text, out numberEntered)) 
     { 
      if (numberEntered < 1 || numberEntered > 28) 
      { 
       MessageBox.Show("You have to enter a number between 1 and 28"); 
       textBox4.Text = 5.ToString(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("You need to enter an integer (number)"); 
      textBox4.Text = 5.ToString(); 
     } 
    } 
+2

为什么'5.ToString()'而不是'“5”'? –

+0

@JonasElfström做同样的事情...... – Jay

+0

@Jonas - 我认为我可以承担5.ToString()的部分责任 - 它来自我给出的答案。我是在“回答手边的问题”模式,而不是“想想我正在写的全部代码”模式,并且涉及将文本框中的文本视为int--我可怜的大脑充斥着自己:) –

回答

1

这可能吗?是。它是首选吗?不是的。最好将字符串解析为一个整数并且像当前那样使用正则表达式进行验证。正则表达式并没有真正做到你要求他们做什么,所以得到的正则表达式会很尴尬。

2
string time = "23:00"; 
var time24 = new Regex(@"^(20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})$"); 
bool is24hTime = time24.IsMatch(time); 

可能会工作,但我认为DateTime.TryParse是要走的路。

0

正如乔纳斯所说,使用DateTime.TryParse比使用正则表达式更可取,但是,您可能需要考虑使用DataTimePicker控件。

如果设置Format属性Custom,然后设置CustomFormat属性HH:mm你会得到像控制一个文本框,限制输入到24小时的时间。

最后,如果您将ShowUpDown设置为true,那么您将不再具有可见日历,而是具有上下移动。