لا توجد نتائج بحث عند التصفية حسب اسم مستخدم يونيكود

لقد واجهت خطأً لا يمكنني من خلاله البحث عن منشورات المستخدم بواسطة @+اسم المستخدم في مربع البحث إذا كان اسم المستخدم يحتوي على يونيكود (مثل الصينية \\p{Han}).
السبب هو أن التعبير النمطي المستخدم في الكود التالي (في lib\\search.rb) يطابق الأحرف الأسكي فقط.

advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) do |posts, match|

لقد اختبرت أنه إذا أضفت allowed_unicode_username_characters في التعبير النمطي (أي إضافة قاعدة advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), فإنه يعمل بشكل جيد.

3 إعجابات

عمل رائع، نعم، نريد بالتأكيد إصلاح هذا، نحن نسمح لمسؤولي الموقع بالاختيار لأسماء المستخدمين اليونيكود.

هل تمانع في تجربة طلب سحب؟ يجب علينا فقط تعديل هذا السلوك إذا اختار مسؤول الموقع أسماء مستخدمين يونيكود.

إعجابَين (2)

أستخدم إضافة لإضافة advanced_filter بالكود التالي، وهو يلبي احتياجاتي.

if SiteSetting.unicode_usernames?
    regexp = Regexp.new("(?i-mx:^(?![_\\-.])(?!.*[_\\-.]{2})[a-zA-Z0-9_\\-.]#{SiteSetting.allowed_unicode_username_characters}+)")
    Search.advanced_filter(regexp) do |posts, match|
      username = match.downcase

      user_id = User.where(staged: false).where(username_lower: username).pluck_first(:id)

      if !user_id && username == "me"
        user_id = @guardian.user&.id
      end

      if user_id
        posts.where("posts.user_id = #{user_id}")
      else
        posts.where("1 = 0")
      end
    end
  end

لكنني لا أعرف كيفية تعديل النواة بشكل صحيح، خاصة عندما يكون allowed_unicode_username_characters متغيرًا. ربما يكون الحل البسيط ولكنه خاطئ على الأرجح هو تغيير advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) إلى advanced_filter(/^\\@(.+)$/i)، تمامًا كما فعلت في advanced_filter(/^user:(.+)$/i).

إعجابَين (2)

أعتقد أن طلب سحب إلى النواة هو الحل هنا. إنها مشكلة في النواة. ستحتاج إلى إضافة اختبار في طلب السحب

إعجابَين (2)

حسناً، لقد قمت بإنشاء طلب سحب (PR) للتو ويمكنك إلقاء نظرة عليه.

3 إعجابات

تم الدمج، شكراً لمساهمتك!

3 إعجابات

تم إغلاق هذا الموضوع تلقائيًا بعد يومين من آخر رد. لم تعد الردود الجديدة مسموح بها.