يشرح هذا الموضوع كيفية استخدام التعبيرات النمطية (regex) بفعالية ضمن ميزة الكلمات الخاضعة للمراقبة في Discourse.
بالنسبة للمواقع المستضافة لدينا، تكون هذه الإعدادات مخفية. يمكن للعملاء في خطط الاستضافة المدفوعة الاتصال بفريق الدعم لدينا عبر
team@discourse.orgلطلب استخدام التعبيرات النمطية مع ميزة الكلمات الخاضعة للمراقبة.
ملاحظة: هذه الميزة غير متاحة في خطة الاستضافة المجانية لدينا.
التعبيرات النمطية (regex) هي أداة قوية لتحديد أنماط البحث. يمكنك استخدام التعبيرات النمطية في ميزة الكلمات الخاضعة للمراقبة لتعزيز دقة ومرونة تصفية الكلمات في موقع Discourse الخاص بك.
لاستخدام التعبيرات النمطية (regex) في الكلمات الخاضعة للمراقبة، يجب عليك أولاً تفعيل إعداد الموقع
watched_words_regular_expressions.
التعبيرات النمطية قوية للغاية وبالتالي قد تكون خطيرة. قد تسبب عبارة regex مكتوبة بشكل غير صحيح مشاكل لمستخدميك. اختبر عباراتك النمطية على نسخ غير إنتاجية قبل النشر الفعلي.
أمثلة على أنماط regex
إليك بعض أنماط regex الشائعة وكيفية استخدامها:
عدم مراعاة حالة الأحرف
بشكل افتراضي، يطابق Discourse الأشكال الكبيرة والصغيرة للكلمة.
thread
سيتم مطابقة thread و THREAD و thReAd.
بدائل الأحرف
استخدم بدائل الأحرف لتوسيع نطاق المطابقات.
(t|7)hr(3|e)(4|a)d
سيتم مطابقة جميع الحالات المذكورة أعلاه، بالإضافة إلى thr3ad و 7hread و thr34d.
threads?\b
سيتم مطابقة thread و threads ولكن ليس threaded أو threading.
حدود الكلمات
قد تطابق أنماط regex أجزاءً من الكلمات عن غير قصد. استخدم حدود الكلمات لتجنب المطابقات الجزئية.
\bthreads?\b
يتم مطابقة thread و threads ولكن يتم تجنب مطابقات مثل threadlike أو unthreading.
التعامل مع أحرف Unicode
قد تفشل حدود الكلمات القياسية مع أحرف Unicode. قم بإنشاء حدود للأحرف التي لا يتعامل معها JavaScript regex بشكل جيد.
gr(ü|ue)(ß|ss)e
يتم مطابقة جميع الأشكال الشائعة للكلمة grüße — بما في ذلك gruesse و GRÜSSE.
لنفترض أنك تريد منع كلمة Über ولكن ليس Übersicht. لا تعمل حدود الكلمات مثل \b(ü|ue)ber\b لأن بعض أعلام حدود الكلمات في JavaScript regex لا تتعامل مع أحرف Unicode. بدلاً من ذلك، يجب عليك إنشاء حدودك الخاصة.
(?:^|\s)(ü|ue)ber\b
سيتم الآن مطابقة Über و ueber بشكل مناسب، ولكن ليس Übersicht أو uebersicht.
اكتشاف استبدال الأحرف المتعمد
لاكتشاف الكلمات التي يستبدل فيها المستخدمون الأحرف بأرقام أو أحرف خاصة:
\bp[a@]ssw[o0]rd\b
يتم المطابقة مع: password، p@ssword، passw0rd، p@ssw0rd، ولكن ليس mypassword أو password123.
التعامل مع الأحرف مع علامات الترقيم بينها
لاكتشاف محاولات التهرب من الفلاتر عن طريق إدخال علامات الترقيم:
\bs\W*p\W*a\W*m\b
يتم المطابقة مع: spam، s.p.a.m، s-p-a-m، ولكن ليس s_p_a_m (الشرطة السفلية تعتبر حرفًا) أو spammy أو myspam.
مطابقة عدة أشكال للكلمات
لمطابقة العبارات التي قد تظهر بأشكال كلمات مختلفة:
\b(contact|email|reach)( us| me)?\b
يتم المطابقة مع: contact، contact us، contact me، email، email us، email me، reach، reach us، reach me.
اكتشاف أنماط البريد الإلكتروني
لاكتشاف أنماط عناوين البريد الإلكتروني العامة:
\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}\b
يتم المطابقة مع: user@example.com، my.name@sub.domain.co.uk، user+tag@domain.org.
العثور على اختلافات الهاشتاج
لمطابقة الهاشتاجات بأحرف كبيرة وصغيرة مختلفة أو اختلافات طفيفة:
\#(disc[o0]urse|f[o0]rum)\b
يتم المطابقة مع: #discourse، #DISCOURSE، #disc0urse، #forum، #f0rum، ولكن ليس #discourseengine أو #forums.
اكتشاف الأنماط المتكررة
لاكتشاف الأحرف المتكررة التي قد تشير إلى محتوى غير مرغوب فيه:
([a-zA-Z])\1{3,}
يتم المطابقة مع: aaaample، helllllo، yessssss، مما يكتشف أي حرف مكرر 4 مرات أو أكثر متتالية.
العثور على عناوين URL مع أو بدون بروتوكول
\b(?:https?:\/\/)?[\w-]+(\.[\w-]+)+\b
يتم المطابقة مع: example.com، sub.domain.org، https://discourse.org، http://meta.discourse.org.
تجنب الفئات المتداخلة للأحرف
صحيح:
(hold)?
يتم مطابقة كلمة “hold” الاختيارية بشكل صحيح.
أو إذا كنت تريد بدائل للأحرف:
[h][o0][l1][d]
يتم المطابقة مع: hold، h0ld، ho1d، h01d.
غير صحيح:
[h[o0][l1]d]?
يحاول هذا بشكل خاطئ تضمين فئات أحرف متداخلة وسيطابق أي حرف واحد من h، o، 0، l، 1، أو d، مما يجعله يطابق كلمات مثل had، old، إلخ.
استخدام الأقواس للكلمات الاختيارية
صحيح:
forum(s)?
يتم مطابقة forum و forums بشكل صحيح.
غير صحيح:
forum[s]?
يتم مطابقة “forum” متبوعة بـ “s” اختيارية، ولكن يتم استخدام فئة أحرف بشكل غير ضروري.
الاستخدام الصحيح لفئات الأحرف
صحيح:
bad word
لمطابقة عبارة “bad word”.
أو كمثال لفئة أحرف:
[bB][aA][dD]
يتم المطابقة مع: bad، Bad، bAd، BAD، إلخ.
غير صحيح:
[bad word]
يتم مطابقة أي حرف واحد من b، a، d، w، o، r، أو d، وليس عبارة “bad word”.
استخدام الكميات بفعالية
\b[0-9]{3,5}\b
يتم مطابقة الأرقام التي تحتوي على 3 إلى 5 أرقام: 123، 1234، 12345، ولكن ليس 12 أو 123456.
للأنماط المتكررة المحددة:
(spam){2,3}
يتم المطابقة مع: spamspam، spamspamspam.
تطبيق حدود الكلمات بشكل صحيح
بدون حدود:
free
يتم المطابقة مع: free، freedom، carefree.
مع حدود:
\bfree\b
يتم المطابقة فقط مع: free، ولكن ليس freedom أو carefree.
التعامل مع أحرف Unicode بشكل صحيح
النهج الصحيح:
(?:^|\s)(ö|oe)zel\b
يتم المطابقة مع: özel، oezel عند حدود الكلمات، حتى مع أحرف Unicode.
النهج غير الصحيح:
\bözel\b
قد لا يعمل هذا بشكل صحيح مع الحرف التركي ö.
معلومات إضافية
يمكنك اختبار تعبيرات Regex على https://regex101.com/. إذا قمت بذلك، تأكد من تبديل نكهة regex إلى ECMAScript.
لا يتم دعم مراجعات مجموعات التقاط Regex (مثل \1 في سلاسل الاستبدال) في قيم استبدال الكلمات الخاضعة للمراقبة. تدعم إجراءات الاستبدال والروابط regex للمطابقة، ولكن الاستبدال يكون دائمًا سلسلة حرفية.