يشرح هذا الموضوع كيفية استخدام التعابير النمطية (regex) بفعالية ضمن ميزة الكلمات المُراقبة في Discourse.
بالنسبة للمواقع المستضافة لدينا، يتم إخفاء هذه الإعدادات. يمكن للعملاء على خطط الاستضافة المدفوعة الاتصال بفريق الدعم لدينا على
team@discourse.orgلطلب دعم التعابير النمطية مع الكلمات المُراقبة.
ملاحظة: هذه الميزة غير متاحة في خطة الاستضافة المجانية الخاصة بنا.
التعابير النمطية (regex) هي أداة قوية لتحديد أنماط البحث. يمكنك استخدام التعابير النمطية في ميزة الكلمات المُراقبة لتعزيز دقة ومرونة تصفية الكلمات على موقع Discourse الخاص بك.
لاستخدام التعابير النمطية (regex) في الكلمات المُراقبة، يجب عليك أولاً تفعيل إعداد الموقع
watched words regular expressions.
التعابير النمطية قوية للغاية وبالتالي خطيرة. يمكن أن يتسبب بيان تعبير نمطي مكتوب بشكل غير صحيح في حدوث مشاكل للمستخدمين. اختبر بيانات التعابير النمطية الخاصة بك على مثيلات غير إنتاجية قبل تفعيلها مباشرة.
أمثلة على أنماط التعابير النمطية
فيما يلي بعض أنماط التعابير النمطية الشائعة وكيفية استخدامها:
عدم حساسية حالة الأحرف
بشكل افتراضي، يطابق 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
قد لا يعمل هذا بشكل صحيح مع الحرف التركي ö.
معلومات إضافية
يمكنك اختبار تعابير Regex على https://regex101.com/. إذا قمت بذلك، تأكد من تبديل نكهة التعبير النمطي إلى ECMAScript.
لا يتم دعم الإحالات الخلفية لمجموعة الالتقاط في التعابير النمطية (على سبيل المثال، \\1 في سلاسل الاستبدال) في قيم استبدال الكلمات المُراقبة. يدعم الإجراءان “استبدال” و “رابط” التعابير النمطية للمطابقة، ولكن الاستبدال هو دائمًا سلسلة حرفية.