正则表达式为d h m时间字符串

时间:2017-11-23 15:41:48

标签: javascript regex string

我在检查字符串输入时是否有问题。 应该可以像这样写:(数字)d(数字)h(数字)m 可以省略每个部分,并且数字没有限制(例如2352h)。 一些可能性如下:

  • 2424d 23h 15m
  • 523h 526m
  • 235d 252m
  • 829d 926h

我使用以下RegEx,它工作得很好,但有一个问题,即一个字母可以多次使用(例如52d 23d)。 我希望每封信都可以使用一次。空格是可选的。 这就是我现在所拥有的:

^((\d{0,9}[dh]\s?){0,1}(\d{0,9}m)?){1,3}\s*$

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

^(?=.*[hmd]$)\d+(?:d\s*)?\d*(?:h\s*)?\d*(?:m\s*)?$

Click for Demo

<强>解释

  • ^ - 断言字符串的开头
  • (?=.*[hmd]$) - 确定字符串以dhm
  • 结尾的正面预测
  • \d+(?:d\s*)? - 匹配1位出现的数字,后跟可选的d后跟0+空格
  • \d*(?:h\s*)? - 匹配0次出现的数字,然后是可选的h,后跟0+空格
  • \d*(?:m\s*)? - 匹配0次出现的数字,然后是可选的m,后跟0+空格
  • $ - 断言字符串的结尾

另一种选择:^(?=.*[hmd]$)(?:\d+d\s*)?(?:\d+h\s*)?(?:\d+m\s*)?$