正则表达式允许用户输入时间 - C#

Tob*_*ith 5 c# regex textbox

许多其他问题为正则表达式提供了答案,这些表达式只允许完全完成的时间,如下所示:^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$

但是这在Textbox.TextChanged事件中没用,因为键入15:45文本框时将包含15:与上面的表达式不匹配的文本框.

是否有一种简单的方法可以允许Regex表达式的部分匹配,以确保仍然会经过一半的时间,或者我是否必须将表达式分解为所有由ors 分隔的部分,如下所示

Wik*_*żew 3

您可以手动调整此类模式以允许部分匹配。要记住的一件事是它们仅适用于实时验证,而不适用于最终验证。要执行最终验证,您需要使用没有可选部分(或只有那些强制性可选部分)的完整模式。

因此,该技术在于使用嵌套的可选非捕获组,例如(?:...(?:...)?)?.

^(?:(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?)?$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

细节

  • ^- 字符串的开头
  • (?:- 可选的非捕获组的开始
    • (?:- 可选的非捕获组的开始
      • [01]?[0-9]- 可选的0or1然后任意 1 位数字
      • |- 或者
      • 2[0-3]-然后是从到 的2数字03
    • )- 可选非捕获组的结尾
  • (?:- 可选的非捕获组的开始
    • : - 一个冒号
    • (?:- 可选的非捕获组的开始
      • [0-5][0-9]?0- 从到 的数字5,然后是任何可选数字
    • )?- 可选非捕获组的结尾
    • )?- 可选非捕获组的结尾
  • )?- 可选非捕获组的结尾
  • $- 字符串末尾。