استخدام التعبيرات النمطية مع الكلمات المراقبة

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

: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?\S+

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

حدود الكلمات

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

\bthreads?\b

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

التعامل مع أحرف Unicode

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

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

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

لنفترض أنك تريد حظر الكلمة Über، ولكن ليس Übersicht. استخدام حدود الكلمات مثل \b(ü|ue)ber\b لا يعمل لأن بعض علامات حدود الكلمات في تعبيرات JavaScript النمطية لا تتعامل مع أحرف 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، وليس العبارة “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

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

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

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

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

13 إعجابًا

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

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

إعجابَين (2)