[英]Validate a xs:duration using a regular expression in Javascript
您遺漏了幾個要點,只需查看故障案例的描述即可輕松解決。 以下正則表達式適用於所有情況(和失敗情況),請參閱正則表達式101
^(-?)P(?=.)((\d+)Y)?((\d+)M)?((\d+)D)?(T(?=.)((\d+)H)?((\d+)M)?(\d*(\.\d+)?S)?)?$
首先,查看P15.5Y only the seconds can be expressed as a decimal
。 您可以在任何地方使用[\\d.]*
,這可以在任何地方使用一個或多個數字或點。 但是只允許秒包含一個點,並且該點后必須跟一個數字。 因此,將秒更改為(\\d*(\\.\\d+)?S)
,將所有其他秒更改為(\\d+Y)
(依此類推)。
另外,字符串需要以可選的-
開頭,然后以P
開頭,因此使用:
^-?P
然后,在P
后面必須有一些內容,只需為此使用超前聲明即可:
(?=.)
然后,如前所述,出現Y
, M
和D
如果有時間成分,那么現在必須有一個T
,因此如果有其他情況,請確保我們有一個T
:
(T(?=.))
...並且只有當我們有T
,才允許我們有H
, M
或S
:
(T(?=.)(\d+H)?(\d+M)?(\d*(\.\d+)?S)?)
前瞻性斷言可確保我們找到一些東西,其余的則捕獲HMS部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.