class validation find: (rules, rule) -> rules = rules.split '|' (rule in rules) validate: (rules) -> $('.form_error').remove() delete @errors_list @fields = {} @data = {} for field, rule of rules @fields[field] = $("input[name=\"#{field}\"]"); @data[field] = @fields[field].val() @validate_field field, @data[field], rules_string unless @errors_list? @data else @show_errors() false show_errors: -> focus_set = false for field, errors of @errors_list messages = [] for error in errors messages.push @lang error @fields[field].before nano templates.form_error, {message: messages.join(' ')} unless focus_set @fields[field].focus() focus_set = true lang: (error) -> [rule,value] = @rule_value error if value? nano lang.errors[rule], {val: value}) else lang.errors[rule] rule_value: (rule)-> x = rule.split '[' if x[1]? if x[1].substr(x[1].length - 1) == ']' x[1] = x[1].substr 0, x[1].length - 1 [x[0],x[1]] min_length: (str,length) -> (str.length >= length) max_length: (str,length) -> (str.length < length) valid_email: (str) -> (/^[\w\d_-]+@+[\w\d_-]+\.+[\w]/i.test(str)) required: (str) -> (@min_length str, 1) min_value: (num,value) -> (num > value) max_value: (num,value) -> (num < value) numeric: (num) -> (/[^\d]/g.test(num)) alpha_numeric: (str) -> (/[^\da-z]/gi.test(str)) trim: (str) -> str.replace /^\s+|\s+$/g, '' integer: (str) -> parseInt(str) parse_rules: (rules) -> rules.split '|' validate_field: (field,str,rules) -> rules = @parse_rules rules for rule_string in rules [rule,value] = @rule_value(rule_string) result = @[rule] str, value unless result in [true,false] # post processing str = @data[field] = result else unless 'required' not in rules and str.length is 0 if result is no @set_error field, rule_string break set_error: (field,rule) -> if @errors_list is undefined @errors_list = {} if @errors_list[field] is undefined @errors_list[field] = [] @errors_list[field].push rule
class validation find: (rules, rule) -> # , | rules = rules.split '|' # - rule rules (rule in rules) validate: (rules) -> # - .form_error $('.form_error').remove() # delete @errors_list # @fields = {} # () @data = {} # for field, rule of rules # ( ) @fields[field] = $("input[name=\"#{field}\"]"); # @data[field] = @fields[field].val() # @validate_field field, @data[field], rules_string # unless @errors_list? # @data else # @show_errors() # false false show_errors: -> # , focus_set = false # for field, errors of @errors_list # messages = [] for error in errors # messages.push @lang error # , @fields[field].before nano templates.form_error, {message: messages.join(' ')} # , unless focus_set @fields[field].focus() focus_set = true lang: (error) -> # , [rule,value] = @rule_value error if value? # nano lang.errors[rule], {val: value}) else # - , lang.errors[rule] rule_value: (rule)-> # min_length[3] x = rule.split '[' if x[1]? if x[1].substr(x[1].length - 1) == ']' x[1] = x[1].substr 0, x[1].length - 1 [x[0],x[1]] min_length: (str,length) -> # true, (str.length >= length) max_length: (str,length) -> # true, (str.length < length) valid_email: (str) -> # true, (/^[\w\d_-]+@+[\w\d_-]+\.+[\w]/i.test(str)) required: (str) -> # true, (@min_length str, 1) min_value: (num,value) -> # true, (num > value) max_value: (num,value) -> # true, (num < value) numeric: (num) -> # true, (/[^\d]/g.test(num)) alpha_numeric: (str) -> # true, (/[^\da-z]/gi.test(str)) trim: (str) -> # str.replace /^\s+|\s+$/g, '' integer: (str) -> # parseInt(str) parse_rules: (rules) -> # rules.split '|' validate_field: (field,str,rules) -> # rules = @parse_rules rules # for rule_string in rules # , [rule,value] = @rule_value(rule_string) # result = @[rule] str, value # - -, false true # - , unless result in [true,false] # str = @data[field] = result # , else unless 'required' not in rules and str.length is 0 if result is no # @set_error field, rule_string # ? # - , # CI break set_error: (field,rule) -> # , if @errors_list is undefined @errors_list = {} # , if @errors_list[field] is undefined @errors_list[field] = [] # @errors_list[field].push rule
lang = errors: min_length: ' , {val} .' max_length: ' , {val} .' min_value: ' , {val}.' max_value: ' , {val}.' numeric: ' .' alpha_numeric: ' .' valid_email: ' .' required: ' .'
_nano_regex = /\{([\w\.]*)\}/g nano = (template, data) -> template.replace _nano_regex, (str, key) -> keys = key.split(".") value = data[keys.shift()] $.each keys, -> value = value[this] (if (value is null or value is `undefined`) then "" else value)
add_quotes = (str) -> (if str? then str.replace /"/g, """ else '')
<label></label> <input type=”text” name=”name” value=””> <label></label> <input type=”text” name=”surname”> <label></label> <input type=”text” name=”email”>
rules = name: 'trim|required|min_length[2]|max_length[255]' surname: 'trim|max_length[255]' email: 'trim|required|valid_email|max_length[255]' validation = new validation $('body').on 'submit', 'form', => data = validation.validate rules if data isnt off # else # . , –
Source: https://habr.com/ru/post/184344/
All Articles