gpt4 book ai didi

regex - 带增量的小时的正则表达式 (RegEx)

转载 作者:行者123 更新时间:2023-12-01 08:59:09 31 4
gpt4 key购买 nike

我只需要接受符合这些规则的输入...

  1. 0.25-24
  2. 0.25 的增量(.00、.25、.50、.75)
  3. 第一个数字不是必须的。
  4. 希望尾随零是可选的。

一些有效条目的示例:

  1. 0.25
  2. .50
  3. .5
  4. 1
  5. 1.0
  6. 5.50
  7. 23.75
  8. 24(最大允许)
  9. 更新:什么都没有,null/blank,也应该被接受为有效

一些无效条目的示例:

  1. 0
  2. .0
  3. .00
  4. 0.0
  5. 0.00
  6. 24.25
  7. -1

我知道 RegEx 是一种模式匹配语言,因此它不适用于范围、小于和大于检查。所以要检查它是否小于或等于 24 意味着我必须找到一个模式,对吗?所以有 24 种可能的模式会使这成为一个很长的正则表达式,我理解正确吗?我可以使用 ColdFusion 进行检查以确保它在 0-24 范围内。如果我在这部分使用 ColdFusion,这不是世界末日,但如果它不会导致它太长,那么将它全部放入 RegEx 会很好。这是我目前所拥有的:

^\d{0,2}((\.(0|00|25|5|50|75))?)$

http://regex101.com/r/iS7zM3

这几乎可以处理所有问题,除了 0-24 范围检查或仅检查零。我会继续努力,但我们将不胜感激。谢谢!

最佳答案

\d{0,2} 改成 (?:1[0-9]?|2[0-4]?|[3-9])? code> 它将匹配 1 到 24(或什么都不匹配)。

您还可以将第二部分简化为 (?:\.(?:00?|25|50?|75))? - 您可以进一步简化为 (?:\.(?:[05]0?|[27]5))? 但这可能会使意图过于模糊。

要排除 24.25,您也许可以使用负前瞻 (?!24\.[^0]) 来防止 24.0 或 24.00 以外的任何内容,但从主要模式,并在开始时包括对 24/24.0/24.00 的特定检查:

(?x)
# checks for 24
^24$|^24\.00?$
|
# integer part
^
(?:1[0-9]?|2[0-3]?|[3-9]|0(?=\.[^0])|(?=\.[^0]))
# decimal part
(?:\.(?:00?|25|50?|75))?
$

这还包括对 0(?=\.[^0]) 的检查,如果下一个字符是. 后跟一个非零值(因此不允许使用 0.0 和 0.00)。

(?x) 标志允许忽略空格,允许代码中的可读正则表达式 - 显然比将其全部压缩到一行更可取 - 并且还允许使用 # 开始行注释以解释模式的某些部分。 (文字空格和散列可以用反斜杠转义,或通过例如 \x23 编码为散列。)

为了比较,这里有一个纯 CFML 的方法:

IsNumeric(Num)
AND Num GT 0
AND Num LTE 24
AND NOT find('.',Num*4)

现在,你真的确定它作为一个正则表达式更好......

关于regex - 带增量的小时的正则表达式 (RegEx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859387/

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