正则表达式允许15分钟增量的小时数

Ben*_*old 0 javascript regex asp.net

我需要一个正则表达式,它限制从0到24的小时输入,其中分数是.25的倍数.请记住必须满足以下条件:

  • 当整个部分为0-23时,小数部分可以是.0,.25,.5或.75
  • 当整个部分是24时,小数部分可以是.0
  • 当不存在整个部分时,小数部分必须是.0,.25,.5或.75
  • 不允许使用空字符串

我非常有信心可以收紧以下表达,但这是迄今为止的情况:

(^(([0-9])|(1[0-9])|(2[0-3]))(\.((0*)|(250*)|(50*)|(750*)))?$)|(^24(\.0*)?$)|(^\.((0+)|(250*)|(50*)|(750*))$)
Run Code Online (Sandbox Code Playgroud)

更新:正则表达式验证存在于客户端(javascript)和服务器(asp.net,c#)上.

Tho*_*rin 11

你绝对,积极地需要这样做作为正则表达式的原因是什么原因?转换为数字并进行一些基本检查会容易得多.

检查数字乘以4是否是自然数<= 96,完成.

从您的个人资料来看,您可能正在使用.NET.我假设您希望将此作为正则表达式,因为您正在使用它进行客户端验证.我会认真考虑使用带有客户端JavaScript的CustomValidator.

JavaScript的这些内容:

<script type="text/javascript">
function checkDuration(text)
{
    var tmp = parseFloat(text) * 4;
    return tmp >= 0 && tmp <= 96 && Math.ceil(tmp) == tmp;
}
</script>
Run Code Online (Sandbox Code Playgroud)

编辑:我在使用浮点数时略微担心舍入错误,但似乎可以解决所有可能的情况.

  • 舍入误差不是问题的原因是所有分数(0,0.25,0.5,0.75)都是整数幂的两个幂. (2认同)

Lau*_*ves 6

^((1?\d|2[0-3])?(\.(0|[27]?5)0*)|(1?\d|2[0-4])(\.0*)?)$
Run Code Online (Sandbox Code Playgroud)