2009-05-19 11 views
14

Qualcuno può aiutarmi a creare un'espressione regolare per convalidare l'ora?Espressione regolare per convalidare l'ora valida

I valori validi sono compresi tra 0:00 e 23:59.

Quando il tempo è inferiore a 10:00 dovrebbe anche supportare uno numeri di caratteri

cioè: questi sono valori validi:

  • 9:00
  • 09:00

Grazie

+0

Mi dispiace sbagliato a scrivere, mi piacerebbe il primo numero per supportare 1 carattere. cioè: 2:00 E 02:00 – juan

+0

Sono '00: 00',' 01: 00', ... valori validi? – Gumbo

+0

sì, ma anche 0:00 e 1:00 – juan

risposta

38

Prova questa espressione regolare:

^(?:[01]?[0-9]|2[0-3]):[0-5][0-9]$ 

o per essere più netta:

^(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$ 
7

Non voglio rubare a nessuno 'un lavoro duro, ma this è esattamente quello che stai cercando, a quanto pare.

using System.Text.RegularExpressions; 

public bool IsValidTime(string thetime) 
{ 
    Regex checktime = 
     new Regex(@"^(20|21|22|23|[01]d|d)(([:][0-5]d){1,2})$"); 

    return checktime.IsMatch(thetime); 
} 
1

Il regex ^(2[0-3]|[01]d)([:][0-5]d)$ deve corrispondere 00:00 alle 23:59. Non so C# e quindi non può darti il ​​codice rilevante.

/RS

7

mi basta usare DateTime.TryParse().

DateTime time; 
string timeStr = "23:00" 

if(DateTime.TryParse(timeStr, out time)) 
{ 
    /* use time or timeStr for your bidding */ 
} 
+0

È valido per la validazione lato client – juan

2

Se si desidera consentire militari e serie con l'uso di AM e PM (opzionale ed insensibile), allora si potrebbe voler dare una prova.

^(?:(?:0?[1-9]|1[0-2]):[0-5][0-9]\s?(?:[AP][Mm]?|[ap][m]?)?|(?:00?|1[3-9]|2[0-3]):[0-5][0-9])$ 
0

Meglio !!!

public bool esvalida_la_hora(string thetime) 
    { 
     Regex checktime = new Regex("^(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"); 
     if (!checktime.IsMatch(thetime)) 
      return false; 

     if (thetime.Trim().Length < 5) 
      thetime = thetime = "0" + thetime; 

     string hh = thetime.Substring(0, 2); 
     string mm = thetime.Substring(3, 2); 

     int hh_i, mm_i; 
     if ((int.TryParse(hh, out hh_i)) && (int.TryParse(mm, out mm_i))) 
     { 
      if ((hh_i >= 0 && hh_i <= 23) && (mm_i >= 0 && mm_i <= 59)) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
+0

Perché è meglio? Sembra che questa risposta non soddisfi i criteri della domanda? – roydukkey

+0

basta provarlo !!!! –

-1
public bool IsTimeString(string ts) 
    { 
     if (ts.Length == 5 && ts.Contains(':')) 
     { 
      int h; 
      int m; 

      return int.TryParse(ts.Substring(0, 2), out h) && 
        int.TryParse(ts.Substring(3, 2), out m) && 
        h >= 0 && h < 24 && 
        m >= 0 && m < 60; 
     } 
     else 
      return false; 
    } 
+1

Aggiungi ulteriori dettagli nella tua risposta. –

0
[RegularExpression(@"^(0[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] (am|pm|AM|PM)$", 
        ErrorMessage = "Invalid Time.")] 

provare questo

+3

Perché l'OP dovrebbe "provare questo"? Una ** buona risposta ** avrà sempre una spiegazione di cosa è stato fatto e perché è stato fatto in quel modo, non solo per l'OP ma per i futuri visitatori di SO che potrebbero trovare questa domanda e leggere la tua risposta. –

Problemi correlati