gpt4 book ai didi

javascript - 验证 xs :duration using a regular expression in Javascript

转载 作者:行者123 更新时间:2023-12-03 01:00:31 25 4
gpt4 key购买 nike

我正在尝试验证 xs:duration,然后将其转换为秒。此时,这就是我所拥有的:

/P^([-])?(([\d.]*)Y)?(([\d.]*)M)?(([\d.]*)D)?T?(([\d.]*)H)?(([\d.]*)M)?(([\d.]*)S)?/

但是,并不拒绝这些无效值(取自 here ):

  • P-20M 减号必须首先出现
  • P20MT 没有时间项,因此不得出现“T”
  • P1YM5D 没有指定月份的值,因此不得使用“M”存在

我错过了什么?

我发现了类似的问题here ,但该正则表达式仅适用于 Python。

最佳答案

您遗漏了几点,通过查看失败案例的描述可以轻松解决这些问题。以下正则表达式适用于所有情况(和失败情况),请参阅 Regex 101

^(-?)P(?=.)((\d+)Y)?((\d+)M)?((\d+)D)?(T(?=.)((\d+)H)?((\d+)M)?(\d*(\.\d+)?S)?)?$

首先看P15.5Y只有秒可以表示为小数。您可以在任何地方使用 [\d.]*,这允许在任何地方使用一个或多个数字或点。但只允许秒有一个点,并且该点后面需要跟一个数字。因此,将秒更改为 (\d*(\.\d+)?S),将所有其他更改为 (\d+Y) (依此类推)。

此外,字符串需要以可选的 - 开头,然后是 P,因此请使用:

^-?P

然后,P 之后必须有一些内容,只需使用前瞻断言即可:

(?=.)

然后,如前所述,出现 YMD

如果有时间成分,现在肯定有一个 T,所以如果有其他情况发生,请确保我们有一个 T:

(T(?=.))

...并且只有当我们有 T 时,我们才可以有 HMS:

(T(?=.)(\d+H)?(\d+M)?(\d*(\.\d+)?S)?)

前瞻断言确保我们会找到一些东西,其余的则捕获 HMS 部分。

关于javascript - 验证 xs :duration using a regular expression in Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644699/

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