用于分钟和秒验证的 MudTextField 的正则表达式掩码

Regex mask for MudTextField for minutes and seconds validation

提问人:Toto 提问时间:11/18/2023 最后编辑:Toto 更新时间:11/19/2023 访问量:71

问:

我有一个文本字段供用户选择分钟+秒的持续时间。我正在尝试使用 IMask 对象来限制使用正则表达式输入。

问题是这完全阻止了输入,我什至无法开始输入一个数字,我不明白,因为正如您在这些链接上看到的那样,我使用的两个正则表达式可以正常工作:

^[0-5]?\d:[0-5]\d$ https://regex101.com/r/ZKO3oE/1

^([0-5]?[0-9]):([0-5]?[0-9])$ https://regex101.com/r/aM7NHi/1

我的代码看起来像这样,您可以在下面的链接上尝试一下:

<MudTextField Mask="@mask1" Label="Duration"  HelperText="@mask1.Mask"
                  @bind-Value="minutesAndSec"  Variant="@Variant.Text" Clearable />

IMask mask1 = new RegexMask(@"^[0-5]?\d:[0-5]\d$");

你可以在这里试试我的代码:

https://try.mudblazor.com/snippet/wOQnbvPhASvzgOyF

我一定错过了什么?非常感谢任何意见,非常感谢

C# 正则表达式 验证 Blazor Mudblazor

评论

2赞 Wiktor Stribiżew 11/18/2023
像往常一样,你需要确保你的输入(即使不完整)与模式完全匹配。有鉴于此,你的两个模式都必须看起来像(在时间和持续时间上都使用相同的模式)@"^[0-5]?(?:\d(?::(?:[0-5]?\d)?)?)?$"
0赞 Reilas 11/18/2023
尝试。[1-9]\d*:(?:\d[1-9]|[1-5]\d)

答:

0赞 hptruc 11/18/2023 #1

在我看来,自定义控件可能很复杂,并可能导致各种问题。相反,您可以使用时间输入类型,如下所示:

<MudTextField T="string" Label="Duration" InputType="InputType.Time"/>

评论

0赞 Toto 11/18/2023
不过,InputType.Time 与我需要表示的值不太匹配。我需要表示一个持续时间,用分钟和秒部分表示,用“:”分隔,范围从 0 到 59 分 59 秒。据我所知,MudBlazor 不支持这种类型的输入。
1赞 Wiktor Stribiżew 11/19/2023 #2

你需要确保你的输入(即使不完整)与模式完全匹配。

这意味着您的两个模式都必须看起来像

@"^[0-5]?(?:\d(?::(?:[0-5]?\d)?)?)?$"

对时间和持续时间使用相同的模式。

细节

  • ^- 字符串的开头
  • [0-5]?- 从 到 的可选数字05
  • (?:\d(?::(?:[0-5]?\d)?)?)?- 可选序列
    • \d(?::(?:[0-5]?\d)?)?- 一个数字,然后是一个可选的序列
      • :(?:[0-5]?\d)?- 一个 char,然后是一个可选的序列:
        • [0-5]?\d- 可选数字,然后是任何单个数字05
  • $- 字符串末尾。