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

时间:2009-07-26 21:26:24

标签: asp.net javascript regex

我需要一个正则表达式,它限制从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*))$)

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

2 个答案:

答案 0 :(得分: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>

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

答案 1 :(得分:4)

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