gpt4 book ai didi

regex - 使用分数验证 ISO 8601 持续时间字符串

转载 作者:行者123 更新时间:2023-12-05 05:40:32 25 4
gpt4 key购买 nike

这可能有点棘手,我试图提出一个正则表达式来根据 8601 规范 (https://en.wikipedia.org/wiki/ISO_8601#Durations) 验证各种给定的日期间隔。我几乎所有其他情况都使用以下正则表达式:

^P(\d+(?:[,.]\d+)?Y)?(\d+(?:[,.]\d+)?M)?(\d+(?:[, .]\d+)?D)?(?:T(\d+(?:[,.]\d+)?H)?(\d+(?:[,.]\d+)?M)?(\d+ (?:[,.]\d+)?S)?)?$

然而,它失败的一个地方是小数单位只允许在最小的提供单位上使用。

例如:

P1DT1.5H 是一个有效的字符串(上面的正则表达式在技术上允许这样做)P1.5DT1H 不是有效的持续时间,因为小时是提供的最小单位。P1.5DT1.5H 也无效。

我的正则表达式技能已经用完了,无法尝试找到一种方法将其合并到上面的内容中。有人对如何实现这一点有任何帮助或指导吗?

最佳答案

假设小数部分只有在右边没有更多数字时才会出现,你可以使用

^P(?!.*\d[,.]\d.*\d)(?!$)(\d+(?:[,.]\d+)?Y)?(\d+(?:[,.]\d+)?M)?(\d+(?:[,.]\d+)?W)?(\d+(?:[,.]\d+)?D)?(T(?=\d)(\d+(?:[,.]\d+)?H)?(\d+(?:[,.]\d+)?M)?(\d+(?:[,.]\d+)?S)?)?$

参见 regex demo .

(?!.*\d[,.]\d.*\d) 如果有一个数字的小数部分后跟另一个数字字符串。

您可以在 Regex for ISO 8601 durations 中了解有关此处使用的模式的更多信息发布。

关于regex - 使用分数验证 ISO 8601 持续时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72387725/

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