|
| 1 | +(ns xapi-schema.spec-2-0-0.regex) |
| 2 | + |
| 3 | +(defn- base-timestamp [] |
| 4 | + (let [;; Date |
| 5 | + year "(\\d{4})" |
| 6 | + month "(0[1-9]|1[0-2])" |
| 7 | + day "(0[1-9]|[12]\\d|3[01])" ; ignore month/leap year constraints |
| 8 | + ;; Time |
| 9 | + hour "([01]\\d|2[0-3])" |
| 10 | + min "([0-5]\\d)" |
| 11 | + sec "([0-5]\\d|60)" ; leap seconds |
| 12 | + sec-frac "(\\.\\d+)" |
| 13 | + ;; Time |
| 14 | + time (str "(?:" hour ":" min ":" sec sec-frac "?" ")") |
| 15 | + date (str "(?:" year "-" month "-" day ")")] |
| 16 | + (str date "[T\\s]" time))) |
| 17 | + |
| 18 | +(def TimestampRegEx ; RFC 3339 |
| 19 | + (let [;; Time |
| 20 | + hour "(?:[01]\\d|2[0-3])" |
| 21 | + min "(?:[0-5]\\d)" |
| 22 | + ;; Offset |
| 23 | + lookahead "(?!-00:00)" |
| 24 | + num-offset (str "(?:[+-]" hour ":" min ")") |
| 25 | + time-offset (str "(Z|" lookahead num-offset ")")] |
| 26 | + (re-pattern (str "^" (base-timestamp) time-offset "$")))) |
| 27 | + |
| 28 | +(def DurationRegEx ; ISO 8601 Durations |
| 29 | + (let [dy "(?:\\d+Y|\\d+\\.\\d+Y$)" |
| 30 | + dm "(?:\\d+M|\\d+\\.\\d+M$)" |
| 31 | + dw "(?:\\d+W|\\d+\\.\\d+W$)" |
| 32 | + dd "(?:\\d+D|\\d+\\.\\d+D$)" |
| 33 | + dh "(?:\\d+H|\\d+\\.\\d+H$)" |
| 34 | + ds "(?:\\d+S|\\d+\\.\\d+S$)" |
| 35 | + dur-date (str "(?:" dd "|" dm dd "?" "|" dy dm "?" dd "?" ")") |
| 36 | + dur-time (str "(?:" ds "|" dm ds "?" "|" dh dm "?" ds "?" ")") |
| 37 | + dur-week (str "(?:" dw ")") |
| 38 | + duration (str "(?:" dur-date "(?:T" dur-time ")?" ")" "|" |
| 39 | + "(?:T" dur-time ")" "|" |
| 40 | + dur-week)] |
| 41 | + (re-pattern (str "^P(?:" duration ")|P(?:" (base-timestamp) ")$")))) |
| 42 | + |
| 43 | +;; Based on http://www.regexr.com/39s32 |
| 44 | +(def xAPIVersionRegEx |
| 45 | + (let [suf-part "[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*" |
| 46 | + suffix (str "(\\.[0-9]+(?:-" suf-part ")?(?:\\+" suf-part ")?)?") |
| 47 | + ver-str (str "^(1\\.0" suffix ")|(2\\.0\\.0)$")] |
| 48 | + (re-pattern ver-str))) |
0 commit comments