Fix only one middle dot being recognized in hashtags (#11345)
Fix #10934
This commit is contained in:
		
							parent
							
								
									4906cabc6b
								
							
						
					
					
						commit
						84e988479e
					
				
					 2 changed files with 38 additions and 2 deletions
				
			
		|  | @ -17,7 +17,7 @@ class Tag < ApplicationRecord | |||
|   has_many :featured_tags, dependent: :destroy, inverse_of: :tag | ||||
|   has_one :account_tag_stat, dependent: :destroy | ||||
| 
 | ||||
|   HASHTAG_NAME_RE = '[[:word:]_]*[[:alpha:]_·][[:word:]_]*' | ||||
|   HASHTAG_NAME_RE = '[[:word:]_][[:word:]_]*[[:alpha:]_·]*[[:word:]_·]*[[:word:]_]' | ||||
|   HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i | ||||
| 
 | ||||
|   validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i } | ||||
|  |  | |||
|  | @ -31,7 +31,43 @@ RSpec.describe Tag, type: :model do | |||
|     end | ||||
| 
 | ||||
|     it 'matches #aesthetic' do | ||||
|       expect(subject.match('this is #aesthetic')).to_not be_nil | ||||
|       expect(subject.match('this is #aesthetic').to_s).to eq ' #aesthetic' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches digits at the start' do | ||||
|       expect(subject.match('hello #3d').to_s).to eq ' #3d' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches digits in the middle' do | ||||
|       expect(subject.match('hello #l33ts35k').to_s).to eq ' #l33ts35k' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches digits at the end' do | ||||
|       expect(subject.match('hello #world2016').to_s).to eq ' #world2016' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches underscores at the beginning' do | ||||
|       expect(subject.match('hello #_test').to_s).to eq ' #_test' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches underscores at the end' do | ||||
|       expect(subject.match('hello #test_').to_s).to eq ' #test_' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches underscores in the middle' do | ||||
|       expect(subject.match('hello #one_two_three').to_s).to eq ' #one_two_three' | ||||
|     end | ||||
| 
 | ||||
|     it 'matches middle dots' do | ||||
|       expect(subject.match('hello #one·two·three').to_s).to eq ' #one·two·three' | ||||
|     end | ||||
| 
 | ||||
|     it 'does not match middle dots at the start' do | ||||
|       expect(subject.match('hello #·one·two·three')).to be_nil | ||||
|     end | ||||
| 
 | ||||
|     it 'does not match middle dots at the end' do | ||||
|       expect(subject.match('hello #one·two·three·').to_s).to eq ' #one·two·three' | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue