提问人:Toto 提问时间:11/18/2023 最后编辑:Toto 更新时间:11/19/2023 访问量:71
用于分钟和秒验证的 MudTextField 的正则表达式掩码
Regex mask for MudTextField for minutes and seconds validation
问:
我有一个文本字段供用户选择分钟+秒的持续时间。我正在尝试使用 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
我一定错过了什么?非常感谢任何意见,非常感谢
答:
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]?
- 从 到 的可选数字0
5
(?:\d(?::(?:[0-5]?\d)?)?)?
- 可选序列\d(?::(?:[0-5]?\d)?)?
- 一个数字,然后是一个可选的序列:(?:[0-5]?\d)?
- 一个 char,然后是一个可选的序列:
[0-5]?\d
- 可选数字,然后是任何单个数字0
5
$
- 字符串末尾。
评论
@"^[0-5]?(?:\d(?::(?:[0-5]?\d)?)?)?$"
[1-9]\d*:(?:\d[1-9]|[1-5]\d)