regex.ismatch永远不会匹配

时间:2015-05-03 19:49:12

标签: regex

我正在尝试验证字符串是否与以下模式“12:24:35”匹配,这是我用来执行此操作的代码:

if (!Regex.IsMatch(textbox_TiempoDePrueba.Text, @"^[0-9]{2}\:\[0-9]{2}\:\[0-9]{2}$"))
{
//do something if there's not match
}

问题是,当textbox_TiempoDePrueba.Text为“00:00:10”时,不匹配。 我是新用的Regex.IsMatch,我不知道我的代码有什么问题,因为我从未得到过匹配。

2 个答案:

答案 0 :(得分:2)

您正在转义模式中的[括号。去掉它;并且模式应该有效:

if ( !Regex.IsMatch(textbox_TiempoDePrueba.Text, @"^[0-9]{2}\:[0-9]{2}\:[0-9]{2}$") )

另一种模式是:

if ( !Regex.IsMatch(textbox_TiempoDePrueba.Text, @"^([0-9]{2}\:){2}[0-9]{2}$") )

答案 1 :(得分:0)

您的正则表达式对于转义括号看起来很好,将\[更改为[, 此外,您正在检查正则表达式是否与!匹配,这是您真正想要的吗?

如果您不需要先验证时间,可以使用:

try {
    if (Regex.IsMatch(textbox_TiempoDePrueba.Text, @"^[\d]{2}:[\d]{2}:[\d]{2}$")) {
        // Successful match
    } else {
        // Match attempt failed
    } 
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

正则表达式解释:

^[\d]{2}:[\d]{2}:[\d]{2}$

Assert position at the beginning of the string «^»
Match a single character that is a “digit” «[\d]{2}»
   Exactly 2 times «{2}»
Match the character “:” literally «:»
Match a single character that is a “digit” «[\d]{2}»
   Exactly 2 times «{2}»
Match the character “:” literally «:»
Match a single character that is a “digit” «[\d]{2}»
   Exactly 2 times «{2}»
Assert position at the end of the string, or before the line break at the end of the string, if any «$»