正则表达式* y * m * d

时间:2017-05-19 14:21:59

标签: javascript regex

我需要为格式化字符串编写正则表达式:"(number_of_years)y(number_of_months)m(number_of days)d"。字符串的每个部分都是可选的,应该用一个空格分隔。我的变种:

/([0-9]+y\s)?([0-9]+m\s)?([0-9]+d)?/

不好,因为在仅输入字符串的第一部分或第二部分时需要添加空格。 好字符串的例子:

"125y"; "36m"; "8d"; "125y 8d"; "125y 36m"; "36m 8d"; "125y 36m 8d".

不应允许在字符串末尾输入空格:*y; *m; *y *m

3 个答案:

答案 0 :(得分:2)

这是另一个版本。物品之间所需的空间,不需要订单

^(?:(?:\b\ \b|^)?(?:(\d+y)|(\d+m)|(\d+d)))+

或者需要订单

^(\d+y)?(?:(\b\ \b|^)(\d+m))?(?:(?:\b\ \b|^)(\d+d))?$

它自己的捕获组中的每个项目

答案 1 :(得分:1)

可以使用:

^(?!.*\s$)(\d+y\s)?(\d+m\s)?(\d+d)?$

live demo

答案 2 :(得分:0)

data.getExtras()

我确信有一百万种方法可以改善这种情况,但这会强制执行不超过12个月或31天。

Examples