a mini social media app for small communities
1module webapp
2
3import regex
4
5// StringValidator handles validation of user-input fields.
6pub struct StringValidator {
7pub:
8 min_len int
9 max_len int = max_int
10 pattern regex.RE
11}
12
13// validate validates a given string and returns true if it succeeded and false
14// otherwise.
15@[inline]
16pub fn (validator StringValidator) validate(str_ string) bool {
17 // for whatever reason form inputs can end up with \r\n. i have
18 // absolutely no clue why this is a thing. anyway, this is here as a fix
19 str := str_.replace('\r\n', '\n')
20
21 // used for debugging validators. don't uncomment this in prod, please.
22 // a) it will log a crap ton of unneeded info, and b) basically all user
23 // inputs are validated. including passwords.
24 // println('validator on: ${str}')
25 // println(' >= min_len: ${str.len >= validator.min_len} (${str.len} >= ${validator.min_len})')
26 // println(' <= max_len: ${str.len <= validator.max_len} (${str.len} <= ${validator.max_len})')
27 // println(' regex: ${validator.pattern.matches_string(str)}')
28
29 return str.len >= validator.min_len && str.len <= validator.max_len
30 && validator.pattern.matches_string(str)
31}
32
33// StringValidator.new creates a new StringValidator with the given min, max,
34// and pattern.
35pub fn StringValidator.new(min int, max int, pattern string) StringValidator {
36 mut re := regex.new()
37 re.compile_opt(pattern) or { panic(err) }
38 return StringValidator{min, max, re}
39}