Regex允许用户键入时间-C#
许多其他问题给出了只允许完全完成时间的正则表达式的答案,如:Regex允许用户键入时间-C#,c#,regex,textbox,C#,Regex,Textbox,许多其他问题给出了只允许完全完成时间的正则表达式的答案,如:^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$ 但这在Textbox.TextChanged事件中没有用,因为在键入15:45时,文本框将包含与上述表达式不匹配的15: 是否有一种简单的方法可以允许正则表达式的部分匹配,以确保半类型的时间仍在流逝,或者我必须将表达式分解为所有由或分隔的部分,例如?您可以手动调整这些模式以允许部分匹配。需要记住的一点是,它们只适用于实时验证,而不适用于最终验证。要执行最
^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
但这在Textbox.TextChanged
事件中没有用,因为在键入15:45
时,文本框将包含与上述表达式不匹配的15:
是否有一种简单的方法可以允许正则表达式的部分匹配,以确保半类型的时间仍在流逝,或者我必须将表达式分解为所有由
或分隔的部分,例如?您可以手动调整这些模式以允许部分匹配。需要记住的一点是,它们只适用于实时验证,而不适用于最终验证。要执行最终验证,您需要使用一个没有可选部分的完整模式(或者只使用那些强制性可选部分)
因此,该技术包括使用嵌套可选项,如(?:…(?:…)?
见
详细信息:
^
-字符串的开头
(?:
-启动可选的非捕获组
(?:
-启动可选的非捕获组
[01]?[0-9]
-可选的0
或1
,然后是任意1位数字
|
-或
2[0-3]
-2
然后是从0
到3
)
-可选非捕获组的结束
(?:
-启动可选的非捕获组
:
-冒号
(?:
-启动可选的非捕获组
[0-5][0-9]?
-从0
到5
的数字,然后是任意可选数字
)?
-可选非捕获组的结束
)?
-可选非捕获组的结束
)?
-可选非捕获组的结束
$
-字符串结束
你在寻找MaskedTextBox
?你可以手动调整模式以使用可选组,比如完美的@WiktorStribiżew-如果你将其作为答案发布,我会接受它?更传统的做法是像^(?:[01][0-9]?| 2[0-3](?::(?:[0-5][0-9])?)?)?)?$否则你会失去选择的踪迹。
^(?:(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?)?$