Commit 9e654d48133c2fcaf1dc41a7b3c17b8693850a65
1 parent
18b4327e
Exists in
master
and in
5 other branches
correcoes_aderencia: Make Full Name validation ignore "áàâãéèêíïóôõöú"
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Rodrigo Medeiros <rodrigo.mss01@gmail.com>
Showing
3 changed files
with
63 additions
and
10 deletions
Show diff stats
lib/ext/person.rb
1 | +# encoding: utf-8 | |
2 | + | |
1 | 3 | require_dependency 'person' |
2 | 4 | |
3 | 5 | class Person |
... | ... | @@ -58,17 +60,19 @@ class Person |
58 | 60 | end |
59 | 61 | |
60 | 62 | def validate_full_name |
61 | - reg_firsts_char = /(^|\s)([a-z]|[0-9])/ | |
62 | - reg_special_char = /[^\w\*\s]/ | |
63 | + full_validation = /([^\w\*\s*])|(^|\s)([a-z]|[0-9])/ | |
64 | + partial_validation = /[^\w\*\s]/ | |
63 | 65 | invalid = false |
64 | 66 | |
65 | 67 | return false if self.name.blank? |
66 | 68 | |
67 | - self.name.split(" ").each do |value| | |
69 | + validation_name = replace_some_special_chars(self.name) | |
70 | + | |
71 | + validation_name.split(" ").each do |value| | |
68 | 72 | invalid = if value.length > 3 |
69 | - reg_firsts_char.match(value) || reg_special_char.match(value) | |
73 | + full_validation.match(value) | |
70 | 74 | else |
71 | - reg_special_char.match(value) | |
75 | + partial_validation.match(value) | |
72 | 76 | end |
73 | 77 | end |
74 | 78 | |
... | ... | @@ -82,4 +86,24 @@ class Person |
82 | 86 | def software? |
83 | 87 | false |
84 | 88 | end |
89 | + | |
90 | + private | |
91 | + | |
92 | + def replace_some_special_chars text | |
93 | + text.gsub(/([áàâãéèêíïóôõöú])/) do |value| | |
94 | + if( ["á","à","â","ã"].include?(value) ) | |
95 | + "a" | |
96 | + elsif( ["é","è","ê"].include?(value) ) | |
97 | + "e" | |
98 | + elsif( ["í","ï"].include?(value) ) | |
99 | + "i" | |
100 | + elsif ( ["ó","ô","õ","ö"].include?(value) ) | |
101 | + "o" | |
102 | + elsif( ["ú"].indexOf(value) ) | |
103 | + "u" | |
104 | + else | |
105 | + value | |
106 | + end | |
107 | + end | |
108 | + end | |
85 | 109 | end | ... | ... |
public/mpog-user-validations.js
... | ... | @@ -148,17 +148,37 @@ |
148 | 148 | } |
149 | 149 | |
150 | 150 | function set_full_name_validation() { |
151 | + // Sorry, I know its ugly. But I cant get ([^\w\*\s*])|(^|\s)([a-z]|[0-9]) | |
152 | + // to ignore Brazilian not so much special chars in names | |
153 | + function replace_some_special_chars(text) { | |
154 | + return text.replace(/([áàâãéèêíïóôõöú])/g, function(value){ | |
155 | + if( ["á","à","â","ã"].indexOf(value) != -1 ) | |
156 | + return "a"; | |
157 | + else if( ["é","è","ê"].indexOf(value) != -1 ) | |
158 | + return "e"; | |
159 | + else if( ["í","ï"].indexOf(value) != -1 ) | |
160 | + return "i"; | |
161 | + else if ( ["ó","ô","õ","ö"].indexOf(value) != -1 ) | |
162 | + return "o"; | |
163 | + else if( ["ú"].indexOf(value) != -1 ) | |
164 | + return "u"; | |
165 | + else | |
166 | + return value; | |
167 | + }); | |
168 | + } | |
169 | + | |
151 | 170 | function is_invalid_formated(text) { |
152 | - var reg_firsts_char = /(^|\s)([a-z]|[0-9])/g; | |
153 | - var reg_special_char = /[^\w\*\s*]/g; | |
154 | - var invalid = false; | |
171 | + var full_validation = /([^\w\*\s*])|(^|\s)([a-z]|[0-9])/; // no special chars and do not initialize with no capital latter | |
172 | + var partial_validation = /[^\w\*\s*]/; // no special chars | |
173 | + text = replace_some_special_chars(text); | |
155 | 174 | var slices = text.split(" "); |
175 | + var invalid = false; | |
156 | 176 | |
157 | 177 | for(var i = 0; i < slices.length; i++) { |
158 | 178 | if( slices[i].length > 3 ) { |
159 | - invalid = reg_firsts_char.test(slices[i]) || reg_special_char.test(slices[i]); | |
179 | + invalid = full_validation.test(slices[i]); | |
160 | 180 | } else { |
161 | - invalid = reg_special_char.test(slices[i]); | |
181 | + invalid = partial_validation.test(slices[i]); | |
162 | 182 | } |
163 | 183 | |
164 | 184 | if(invalid) break; | ... | ... |
test/unit/mpog_person_test.rb
1 | +# encoding: utf-8 | |
2 | + | |
1 | 3 | require File.dirname(__FILE__) + '/../../../../test/test_helper' |
2 | 4 | |
3 | 5 | class MpogSoftwarePluginPersonTest < ActiveSupport::TestCase |
... | ... | @@ -8,6 +10,13 @@ class MpogSoftwarePluginPersonTest < ActiveSupport::TestCase |
8 | 10 | assert_equal true, p.save |
9 | 11 | end |
10 | 12 | |
13 | + should 'save person with a valid full name with accents' do | |
14 | + p = Person::new :name=>'Jônatàs dâ Sîlvã Jösé', :identifier=>"jonatas-jose-da-silva" | |
15 | + p.user = fast_create(:user) | |
16 | + | |
17 | + assert_equal true, p.save | |
18 | + end | |
19 | + | |
11 | 20 | should 'not save person whose name has not capital letter' do |
12 | 21 | p = Person::new :name=>"simple name" |
13 | 22 | assert !p.save, _("Name Should begin with a capital letter and no special characters") | ... | ... |