استخدام Regex مع الكلمات المراقبة

:bookmark: يشرح هذا الموضوع كيفية استخدام التعابير النمطية (regex) بفعالية ضمن ميزة الكلمات المُراقبة في Discourse.

:discourse: بالنسبة للمواقع المستضافة لدينا، يتم إخفاء هذه الإعدادات. يمكن للعملاء على خطط الاستضافة المدفوعة الاتصال بفريق الدعم لدينا على team@discourse.org لطلب دعم التعابير النمطية مع الكلمات المُراقبة.
ملاحظة: هذه الميزة غير متاحة في خطة الاستضافة المجانية الخاصة بنا.

التعابير النمطية (regex) هي أداة قوية لتحديد أنماط البحث. يمكنك استخدام التعابير النمطية في ميزة الكلمات المُراقبة لتعزيز دقة ومرونة تصفية الكلمات على موقع Discourse الخاص بك.

:information_source: لاستخدام التعابير النمطية (regex) في الكلمات المُراقبة، يجب عليك أولاً تفعيل إعداد الموقع watched words regular expressions.

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

أمثلة على أنماط التعابير النمطية

فيما يلي بعض أنماط التعابير النمطية الشائعة وكيفية استخدامها:

عدم حساسية حالة الأحرف

بشكل افتراضي، يطابق Discourse الأشكال الكبيرة والصغيرة للكلمة.

thread

سيؤدي هذا إلى مطابقة thread و THREAD و thReAd.

بدائل الأحرف

استخدم بدائل الأحرف لتوسيع نطاق التطابقات.

(t|7)hr(3|e)(4|a)d

سيؤدي هذا إلى مطابقة جميع الحالات المذكورة أعلاه، بالإضافة إلى thr3ad و 7hread و thr34d.

threads?\\b

سيؤدي هذا إلى مطابقة thread و threads ولكن ليس threaded أو threading.

حدود الكلمات

يمكن لأنماط التعابير النمطية أن تطابق أجزاء من الكلمات عن غير قصد. استخدم حدود الكلمات لتجنب التطابقات الجزئية.

\\bthreads?\\b

يطابق هذا thread و threads ولكنه يتجنب التطابقات مثل threadlike أو unthreading.

التعامل مع أحرف يونيكود

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

gr(ü|ue)(ß|ss)e

يطابق هذا جميع الأشكال الشائعة إملائياً لكلمة grüße — بما في ذلك gruesse و GRÜSSE

لنفترض أنك تريد حظر كلمة Über، ولكن ليس Übersicht. استخدام حدود الكلمات مثل \\b(ü|ue)ber\\b لا يعمل لأن بعض علامات حدود الكلمات في تعابير JavaScript النمطية لا تتعامل مع أحرف يونيكود. بدلاً من ذلك، عليك إنشاء حدودك الخاصة.

(?:^|\\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

إيجاد أشكال مختلفة للوسوم (#hashtags)

لمطابقة الوسوم ذات حالات الأحرف المختلفة أو الاختلافات الطفيفة:

\\#(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

التعامل مع أحرف يونيكود بشكل صحيح

النهج الصحيح:

(?:^|\\s)(ö|oe)zel\\b

يطابق هذا: özel، و oezel عند حدود الكلمات، حتى مع أحرف يونيكود

النهج غير الصحيح:

\\bözel\\b

قد لا يعمل هذا بشكل صحيح مع الحرف التركي ö.

معلومات إضافية

:information_source: يمكنك اختبار تعابير Regex على https://regex101.com/. إذا قمت بذلك، تأكد من تبديل نكهة التعبير النمطي إلى ECMAScript.

لا يتم دعم الإحالات الخلفية لمجموعة الالتقاط في التعابير النمطية (على سبيل المثال، \\1 في سلاسل الاستبدال) في قيم استبدال الكلمات المُراقبة. يدعم الإجراءان “استبدال” و “رابط” التعابير النمطية للمطابقة، ولكن الاستبدال هو دائمًا سلسلة حرفية.

13 إعجابًا

سامحني على قلة خبرتي، لكنني لم أتمكن من العثور على إعداد الموقع لـ watched words regular expressions في أي مكان. لقد بحثت أيضًا عن regex و regular expression ومتغيرات أخرى، لكنني لم أجد شيئًا يبدو أنه سيمكن التعبيرات العادية للكلمات المراقبة. هل لديك المسار لإعدادات الموقع حيث يمكن تمكين هذا (مثيل مستضاف سحابيًا)؟

تعديل كانت الإجابة أعلاه مباشرة ووجدتها هنا

إعجابَين (2)