рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЙрдлреАред рдорд╛рдиреНрдпрддрд╛

рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рддреНрдпрд╛рдкрди рдЙрджрд╛рд╣рд░рдгред

CoffeeScript рд╕реБрдЦрдж рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрдардиреАрдп рдХреЛрдб рдирд┐рдХрд▓рд╛ рдЬреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред


рдирд┐рдореНрди рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рддрд░реАрдХреЗ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

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 


рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рджрдо рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЦреЛрдЬ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдХреЛрдбрдиреИрдЬрд┐рдЯрд░ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЬрд╣рд╛рдВ CI рдиреЗ рдПрдХ рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рдерд╛ рдХрд┐ рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реАрдзреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реВрдВред

рдорд╛рдиреНрдп рд╡рд┐рдзрд┐, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдкрддреНрд░ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдФрд░ рдирд┐рдпрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдЧреА рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдЧреАред рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪреНрдЫ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рдПрдЧреАред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ рднрд╛рдИ рдХреЛ show_errors () рдХрд╣реЗрдЧреА рдФрд░ рдЭреВрдареА рд▓реМрдЯреЗрдЧреАред рдбреЗрдЯрд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Show_errors рдкрджреНрдзрддрд┐ рдлрд╝реЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЗ рдмрдЧрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдбрд╛рд▓реЗрдЧреА, рдФрд░ рддреНрд░реБрдЯрд┐ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлрд╝реЛрдХрд╕ (рдХрд░реНрд╕рд░) рд╕реЗрдЯ рдХрд░реЗрдЧреАред рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреБрд░рдВрдд рдЧрд▓рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдорд╛рдЙрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реИрдВрдЧ рд╡рд┐рдзрд┐ рдПрдХ рдЙрдкрдпреБрдХреНрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреА, рдЗрд╕рдореЗрдВ рдирд┐рдпрдо рд╕реЗ рдорд╛рди рдбрд╛рд▓реЗрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдВред

рдирд┐рдпрдо_рд╡рд╛рдпреБ рд╡рд┐рдзрд┐ рдирд┐рдпрдо рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧреАред рд╡реНрд╣рд┐рдк рдЕрдк, рд╢рд╛рдпрдж рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордп рдФрд░ рд╕рдордЭ рд╣реИ, рддреЛ рдкреАрдПрдо рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рд╣рдо рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕реА рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рддрд░реАрдХреЗ min_length, max_length, valid_email, рдЖрд╡рд╢реНрдпрдХ, min_value, max_value, рдиреНрдпреВрдореЗрд░рд┐рдХ рдФрд░ рдЕрд▓реНрдлрд╛_рдиреНрдпреВрдореЗрд░рд┐рдХ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ, рд╕рддреНрдпрд╛рдкрди рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд╕рд╛рдл рднреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдЯреНрд░рд┐рдо рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдРрд╕рд╛ рдХрд░рддреА рд╣реИрдВред

рдкреНрд░рд╛рдердорд┐рдХ parse_rules рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рдпрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ CodeIgniter рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред

Validate_field рд╡рд┐рдзрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд╛рдо, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЬрд╛рдВрдЪ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд░рдЦрддреА рд╣реИред

Set_error рдкрджреНрдзрддрд┐ рдмрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдпрд╛рдж рдХрд░рддреА рд╣реИред

рдЕрдм рд▓рд╛рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рд╕рдВрд╕реНрдХрд░рдгред

 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/In184344/


All Articles