簡體   English   中英

正則表達式* y * m * d

[英]Regular expression *y *m *d

我需要為格式化字符串編寫正則表達式:“(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 *y; *m; *y *m *y; *m; *y *m

這是一個替代版本。 物品之間所需的空間,不需要訂單

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

或者需要訂單

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

它自己的捕獲組中的每個項目

可以使用:

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

現場演示

^([0-9]+y\s?)?(((1[0-2])|([1-9]))m\s?)?((([12]?[0-9])|(3[01]))d)?$

我確信有一百萬種方法可以改善這一點,但這強制說不超過12個月或31天。

例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM