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

标签 c# regex textbox

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

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

是否有一种简单的方法允许 Regex 表达式的部分匹配以确保半键入时间仍然过去,或者我是否必须将表达式分解成由 分隔的部分, 比如 this

最佳答案

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

因此,该技术包括使用嵌套的可选 non-capturing groups ,比如 (?:...(?:...)?)?

^(?:(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?)?$

参见 regex demo

详细信息:

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

关于c# - 允许用户输入时间的正则表达式 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200048/

相关文章:

c# - 如何使用WPF绘制二叉 TreeView ?

c# - MVC5 模型绑定(bind)——子对象全部为 null

c# - 如果未启用 JavaScript,则重定向

c# - 逗号或分号分隔的自动完成文本框

c# - 更新到 Sharpdx 2.6.2 后无法编译 hlsl 着色器

regex - 为什么我的 Emacs 正则表达式不与 ^ 匹配行的开头?

c# - 检查字符串C#中是否有电话号码

javascript - 用两个词而不是一个词对数组进行分组

asp.net - 通过 TextChanged 事件回发到文本框后提交表单时,RequiredFieldValidator 不起作用

C# 在禁用的文本框(表单)上显示工具提示