2009-05-19 25 views
14

¿Alguien me puede ayudar a construir una expresión regular para validar la hora?Expresión regular para validar la hora válida

Los valores válidos serían de 0:00 a 23:59.

Cuando el tiempo es inferior a 10:00 sino que también debe soportar uno los números de caracteres

es decir: estos son valores válidos:

  • 9:00
  • 09:00

Gracias

+0

Lo sentimos He escrito mal, me gustaría que el primer número para apoyar 1 carácter. es decir: 2:00 Y 02:00 – juan

+0

Son '00: 00',' 01: 00', ... valores válidos? – Gumbo

+0

sí, pero también 0:00 y 1:00 – juan

Respuesta

38

Probar esta expresión regular:

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

o para ser más clara:

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

no quiero robar a nadie un trabajo duro, pero this es exactamente lo que está buscando, al parecer.

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

La expresión regular debe coincidir con ^(2[0-3]|[01]d)([:][0-5]d)$ 00:00 a 23:59. No sé C# y por lo tanto no puedo darle el código relevante.

/RS

7

yo sólo uso DateTime.TryParse().

DateTime time; 
string timeStr = "23:00" 

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

Es para la validación del lado del cliente – juan

2

Si desea permitir militar y estándar con el uso de AM y PM (opcional e insensible), entonces es posible que desee dar a este un intento.

^(?:(?: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

¡¡Mejor !!!

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

¿Por qué es esto mejor? Parece que esta respuesta no cumple con los criterios de la pregunta? – roydukkey

+0

solo pruébalo !!!! –

-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

Agregue más detalles en su respuesta. –

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

probar este

+3

¿Por qué debería el OP "probar esto"? Una ** buena respuesta ** siempre tendrá una explicación de lo que se hizo y por qué se hizo de esa manera, no solo para el OP sino para los futuros visitantes de SO que puedan encontrar esta pregunta y leer su respuesta. –

Cuestiones relacionadas