C# 文本框中的时间验证。验证某个正则表达式的文本框

C# 文本框中的时间验证。验证某个正则表达式的文本框,c#,wpf,C#,Wpf,我必须制作一个文本框(WPF),用于输入带有验证的时间。 我想输入时间(上午6:12)的正则表达式验证。选中此项:处理控件中的验证错误 否则,您可以在viewmodel中实现,以便将验证嵌入到数据本身。检查此项:以处理控件中的验证错误 否则,您可以在viewmodel中实现验证,以便将验证嵌入到数据本身。这个如何: class TimeTextBox : TextBox { public Boolean IsProperTime { get; set; } protected

我必须制作一个文本框(WPF),用于输入带有验证的时间。 我想输入时间(上午6:12)的正则表达式验证。

选中此项:处理控件中的验证错误

否则,您可以在viewmodel中实现,以便将验证嵌入到数据本身。

检查此项:以处理控件中的验证错误

否则,您可以在viewmodel中实现验证,以便将验证嵌入到数据本身。

这个如何:

class TimeTextBox : TextBox
{
    public Boolean IsProperTime { get; set; }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        DateTime time;

        if (String.IsNullOrEmpty(Text) || !DateTime.TryParse(Text, out time))
        {
            IsProperTime = false;
        }
        else
        {
            IsProperTime = true;
        }

        UpdateVisual();

        base.OnTextChanged(e);
    }

    private void UpdateVisual()
    {
        if (!IsProperTime)
        {
            BorderBrush = Brushes.Red;
            BorderThickness = new Thickness(1);
        }
        else
        {
            ClearValue(BorderBrushProperty);
            ClearValue(BorderThicknessProperty);
        }
    }
}
您可以更改其中的时间解析逻辑。

这个如何:

class TimeTextBox : TextBox
{
    public Boolean IsProperTime { get; set; }

    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        DateTime time;

        if (String.IsNullOrEmpty(Text) || !DateTime.TryParse(Text, out time))
        {
            IsProperTime = false;
        }
        else
        {
            IsProperTime = true;
        }

        UpdateVisual();

        base.OnTextChanged(e);
    }

    private void UpdateVisual()
    {
        if (!IsProperTime)
        {
            BorderBrush = Brushes.Red;
            BorderThickness = new Thickness(1);
        }
        else
        {
            ClearValue(BorderBrushProperty);
            ClearValue(BorderThicknessProperty);
        }
    }
}

您可以更改其中的时间解析逻辑。

这里的Regex不是正确的选择。您确实需要将字符串转换为日期或时间。使用DateTime.TryParse(),以便始终确保如果验证允许,则转换也会正常工作。

Regex不是正确的选择。您确实需要将字符串转换为日期或时间。使用DateTime.TryParse(),以便始终确保如果验证允许,则转换也会起作用。

请更具体一些。您正在努力解决哪一部分?我有一个文本框,用户可以在其中输入时间,如上午6:00,或者用户可以以分钟为单位给出时间,例如123>,该时间将使用转换器转换为时间格式。但我想对用户输入进行验证。我认为使用正则表达式会有所帮助。仍然在寻找一个完美的解决方案。我已经实现了错误模板,因此不需要关于如何抛出错误的帮助。如果有多种格式,人们可能会以他们熟悉的格式输入时间(123可能是凌晨1:23或2:03)。您是否限制用户输入时间的格式?是。我限制他们输入1:23而不是123。你的评论相互矛盾。请更具体一些。您正在努力解决哪一部分?我有一个文本框,用户可以在其中输入时间,如上午6:00,或者用户可以以分钟为单位给出时间,例如123>,该时间将使用转换器转换为时间格式。但我想对用户输入进行验证。我认为使用正则表达式会有所帮助。仍然在寻找一个完美的解决方案。我已经实现了错误模板,因此不需要关于如何抛出错误的帮助。如果有多种格式,人们可能会以他们熟悉的格式输入时间(123可能是凌晨1:23或2:03)。您是否限制用户输入时间的格式?是。我限制他们输入1:23而不是123。你们的评论相互矛盾。举手,毫无疑问这是目前为止最好的答案。举手,毫无疑问这是目前为止最好的答案。