2

我是 C#.net 的新手。我想要对仅采用 hh:mm:ss 格式的文本框进行验证。下面是我的代码及其工作。它给出的输出为真 23:45:45(仅示例),对于 -23:45:45 也为真(仅示例)。现在我想要验证,它为 -23:45:45(仅示例)返回 false,因为它是负时间。我的运行代码不适用于负时间。

          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;
        }
    }
4

2 回答 2

14

我根本不会使用正则表达式 - 我只是尝试DateTime使用自定义格式将结果解析为:

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

(如果您真的想坚持使用正则表达式,请遵循 Mels 的答案。我会摆脱毫无意义的 try/catch 块,并且可能只构造一次正则表达式并重用它。)

于 2013-05-06T07:20:29.323 回答
5

用 ^ 开头和 $ 结尾包围你的正则表达式。这些标记字符串的开头和结尾,并在有任何其他字符时使匹配无效。

于 2013-05-06T07:20:37.610 回答