正则表达式的时间段

时间:2017-05-17 09:55:03

标签: regex oracle-adf

我正在使用jdev 12.2.1.0.0,我正在尝试使用""验证输入字段(String)。 其中我尝试以下面显示的格式输入时间段

  • 1h 40m 20s
  • 1h 40m
  • 2h 30s
  • 30m 20s
  • 30米
  • 30(将被视为30米)
  • 10S

所以我需要一个正则表达式,允许用户以任何给定的格式输入时间段,也不需要考虑单位之间的空间(即:1h30m也有效)。

4 个答案:

答案 0 :(得分:0)

试试这个正则表达式:
^(?:\d+h)?(?:(?!\n)\s)?(?:\d+m?)?(?:(?!\n)\s)?(?:\d+s)?$

演示here

答案 1 :(得分:0)

以下建议符合您想要的所有案例:

((\d{1,2}h\s?)?(\d{1,2}m\s?)?(\d{1,2}s\s?)?)|\d{1,2}

Demo on regex101

答案 2 :(得分:0)

匹配所有案件。
如果超过1个周期,则分钟/秒必须在0到59之间:

^(?:\d+[hms]?|\d+h(?:[ ]*[0-5]?\dm)?(?:[ ]*[0-5]?\ds)?|\d+m[ ]*[0-5]?\ds)$

测试here

答案 3 :(得分:0)

[0-9]+[d|h|m|s|D|H|M|S]?[^$]?([0-9]+[h|m|s|H|M|S]?[^$]?)?([0-9]+[m|s|M|S]?[^$]?)?([0-9]+[s|S]?[^$])?

其他答案均未达到我的目的。 但是,由于此,我对Regex的研究更多了。 因此,请记住[0-9]表示一个数字,而+是将其扩展为多个数字。 [d | h | m | s |]表示d,h,m或s中的任何字母。您可以随意添加几天或几小时。 ?是使前面的内容为可选。

https://staging.global.com