gpt4 book ai didi

javascript - 正则表达式 : match hh:mm, hh.mm 或 h

转载 作者:行者123 更新时间:2023-12-04 18:35:38 27 4
gpt4 key购买 nike

我正在寻找一个正则表达式来匹配不同的时间格式(用于时间跟踪网络应用程序)在 javascript 中。用户可以使用以下格式之一插入时间:

h
hh:mm
hh.mm

我可以很容易地创建一个正则表达式来匹配 hh:mm 和 hh.mm,但我无法让单一小时格式工作。

这是我当前的正则表达式:([0-2][0-9])(.|:)([0-5][0-9])

允许的字符:0-9.:。如果用户键入任何其他字符,则验证应该失败。

有人有什么建议吗?

编辑

以下格式应该适用于:

高:毫米 (3:30)

解决方案:http://regexr.com?31gc3

最佳答案

您可以通过将 block 放在 ( ... )? 中使其成为可选 block ,这等同于 ( ... ){0,1} 允许零或一个引用。

你的表情变成:

/([0-2][0-9])((.|:)([0-5][0-9]))?/

这匹配 1212:3012.30。它不会匹配 55:305.30。可以通过将第一个数字设为可选来启用单个数字的小时输入:

/([0-2]?[0-9])((.|:)([0-5][0-9]))?/

如果您使用 .match,您会发现有 5 个结果:

["12:30", "12", ":30", ":", "30"]

当您将 ( ... ) 转换为 (?: ... )

时,您可以通过消除不必要的匹配将其减少到 3
/([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/

这给你:

["12:30", "12", "30"]

更新

根据您的更新,您想要匹配边界。有几种方法可以做到这一点。

  1. ^ 开头会将表达式的前面与每行/字符串的开头联系起来。
  2. $ 结尾会将表达式的结尾与字符串的结尾联系起来。
  3. \b 开头或结尾将强制边缘与“边界”相对。

综合起来:

如果您只想匹配只包含日期的行,您可以使用:

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?$/

这不会捕获“hello 1.30”或“1.30 hello”。

如果你想匹配以日期开头的行,你可以使用:

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/

但这将匹配“1.30000”。

如果您要在行首查找日期,最好的选择是:

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/

因为它将匹配“1.30 测试”而不是“1.300000”。不幸的是,它也会匹配“1.30.30”,但这是 JavaScript 的 RegExp 处理器的限制。

如果你在字符串中寻找时间,这就变成了:

/\b([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/

它将“test 1.30 test”与“.10.10.10”之类的不幸情况相匹配。

关于javascript - 正则表达式 : match hh:mm, hh.mm 或 h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com