diff --git a/src/main/cljc/dda/c4k_common/predicate.cljc b/src/main/cljc/dda/c4k_common/predicate.cljc index 9edd5e8..03e9160 100644 --- a/src/main/cljc/dda/c4k_common/predicate.cljc +++ b/src/main/cljc/dda/c4k_common/predicate.cljc @@ -14,6 +14,16 @@ (and (string? input) (some? (re-matches #"(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)" input)))) +(defn ipv4-string? + [input] + (and (string? input) + (some? (re-matches #"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$" input)))) + +(defn ipv6-string? + [input] + (and (string? input) + (some? (re-matches #"(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))" input)))) + (defn string-of-separated-by? [spec-function separator input] (every? true? (map spec-function (str/split input separator)))) diff --git a/src/test/cljc/dda/c4k_common/predicate_test.cljc b/src/test/cljc/dda/c4k_common/predicate_test.cljc index dc3b420..182ced5 100644 --- a/src/test/cljc/dda/c4k_common/predicate_test.cljc +++ b/src/test/cljc/dda/c4k_common/predicate_test.cljc @@ -16,6 +16,18 @@ (is (false? (cut/fqdn-string? "123.456.789"))) (is (false? (cut/fqdn-string? "test&test.de")))) +(deftest test-ipv4-string? + (is (true? (cut/ipv4-string? "127.0.0.1"))) + (is (true? (cut/ipv4-string? "192.168.192.168"))) + (is (true? (cut/ipv4-string? "1.2.3.4"))) + (is (false? (cut/ipv4-string? "1.a.2.b"))) + (is (false? (cut/ipv4-string? "f::f::f::f")))) + +(deftest test-ipv6-string? + (is (true? (cut/ipv6-string? "2a01:4f8:c012:cb41::1"))) + (is (false? (cut/ipv6-string? "1.a.2.b"))) + (is (false? (cut/ipv6-string? "f::f::f::f")))) + (deftest test-string-of-separated-by? (is (true? (cut/string-of-separated-by? cut/bash-env-string? #":" "abcd"))) (is (true? (cut/string-of-separated-by? cut/bash-env-string? #":" "abcd:efgh")))