a mini social media app for small communities
at main 1.4 kB view raw
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}