2013-05-06 5 views
1

Я новичок в C# .net. Мне нужна проверка для текстового поля, которое принимает только формат hh: mm: ss. Ниже мой код и его пронзание. Это дает результат true 23:45:45 (только пример), а также true для -23: 45: 45 (только пример). Теперь мне нужна проверка, которая возвращает false для -23: 45: 45 (пример только), потому что это отрицательное время. Мой текущий код не работает в течение отрицательного времени.Подтверждение для hh: mm: ss

  IsTrue = ValidateTime(txtTime.Text); 
      if (!IsTrue) 
      { 

       strErrorMsg += "\nPlease insert valid alpha time in hh:mm:ss formats"; 
       isValidate = false; 
      } 

    public bool ValidateTime(string time) 
    { 
     try 
     { 
      Regex regExp = new Regex(@"(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])"); 

      return regExp.IsMatch(time); 
     } 
     catch (Exception ex) 
     { 

      throw ex; 
     } 
    } 

ответ

12

я бы не использовать регулярные выражения на всех - я просто пытаюсь разобрать результат в виде DateTime с произвольным форматом:

public bool ValidateTime(string time) 
{ 
    DateTime ignored; 
    return DateTime.TryParseExact(time, "HH:mm:ss", 
            CultureInfo.InvariantCulture, 
            DateTimeStyles.None, 
            out ignored); 
} 

(Если вы действительно хотите придерживаться с регулярными выражениями, следуйте ответам от Mels. И я избавлюсь от бессмысленного блока try/catch и, возможно, просто создам регулярное выражение и снова его использую.)

+0

Jon, woulnd't [TimeSpan.TryParse] (http://msdn.microsoft.com/en-us/library/3z48198e.aspx) лучше? – Habib

+0

О, неважно, получил мой ответ за отрицательные часы :) +1. 'TimeSpan.TryParse' будет анализировать' -23: 45: 45'. – Habib

+0

Из любопытства: нет ли более элегантного способа указать, что мы не заботимся о фактической анализируемой дате/времени? За исключением использования переменной «ignored», то есть? – Mels

4

Окружать ваше регулярное выражение с помощью^в начале и $ в конце. Они отмечают начало и конец строки и аннулируют совпадение, когда есть другие символы.

+0

Конечно, ответ Джона Скита намного более изящный ;-) – Mels

+6

Но у вас есть возможность объяснить, что было не так, что вполне может помочь ОП в других ситуациях, когда регулярное выражение действительно может быть правильным. –

Смежные вопросы