ISO 8601 期間形式で期間を検証するには、正規表現が必要です(必要のない小数部を除いて)。
PnYnMnDTnHnMnS
PnW
ここに私が持っているものがあります:
^P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$
唯一の問題は、すべての部分が "zero or one" であるため、この正規表現で文字列P
およびが許可されることです。PT
?
- 少なくとも 1 つのコンポーネント (日付または時刻) が必要です
- ある場合は
T
、時間コンポーネント (H、M、または S) が必要です。 - ある場合
T
、日付コンポーネント (Y、M、または D) がある場合とない場合があります。 - オーバーフローが許可されます (例:
P72H
とほぼ同等P3D
)
許容される入力:
P1Y // date component only
P2MT30M // date and time components
PT6H // time component only
P5W // another date component
許容できない入力:
P // no components
PT // no components
P3MT // T specified but not time components
現在、無効な文字列はクライアント側の検証に合格していますが、サーバー側では渡されてDateInteval
いるため失敗していますが、可能であればクライアント側で失敗したいと考えています。誰もが Chrome 40 以降を使用してminlength='3'
いる場合は、input 要素で指定して支援することができますが、残念ながらそうではありません。