diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index bfab232cf..735f21496 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1347,7 +1347,7 @@ en: unique: "must be unique" blank: "must be present" must_begin_with_alphanumeric: "must begin with a letter or number or an underscore" - must_end_with_alphanumeric: "must end with a letter or number" + must_end_with_alphanumeric: "must end with a letter or number or an underscore" must_not_contain_two_special_chars_in_seq: "must not contain a sequence of 2 or more special chars (.-_)" must_not_contain_confusing_suffix: "must not contain a confusing suffix like .json or .png etc." email: diff --git a/lib/user_name_suggester.rb b/lib/user_name_suggester.rb index 09e4db698..4819a3f87 100644 --- a/lib/user_name_suggester.rb +++ b/lib/user_name_suggester.rb @@ -38,6 +38,7 @@ module UserNameSuggester name = name.gsub(/^[^[:alnum:]]+|\W+$/, "") .gsub(/\W+/, "_") .gsub(/^\_+/, '') + .gsub(/[\-_\.]{2,}/, "_") name end diff --git a/spec/components/user_name_suggester_spec.rb b/spec/components/user_name_suggester_spec.rb index 8f63ba1b2..ec9eb7a46 100644 --- a/spec/components/user_name_suggester_spec.rb +++ b/spec/components/user_name_suggester_spec.rb @@ -75,6 +75,11 @@ describe UserNameSuggester do expect(UserNameSuggester.suggest("myname.")).to eq('myname') end + it 'handles usernames with a sequence of 2 or more special chars' do + expect(UserNameSuggester.suggest('Darth__Vader')).to eq('Darth_Vader') + expect(UserNameSuggester.suggest('Darth_-_Vader')).to eq('Darth_Vader') + end + it 'should handle typical facebook usernames' do expect(UserNameSuggester.suggest('roger.nelson.3344913')).to eq('roger_nelson_33') end