أثناء تحويل قائمة كبيرة من الكلمات المرصودة إلى تعبيرات نمطية، اكتشفت بعض الطرق لتجاوز الفلاتر. يبدو أن هذه الطرق تعمل مع الكلمات المرصودة “العادية” وكذلك مع التعبيرات النمطية.
المسافات المزدوجة: إذا كانت الكلمة المرصودة لديك هي forbidden word، فيمكن تجاوزها بوضع مسافات متعددة بين الكلمتين. من المثير للاهتمام أن المنشور النهائي سيحذف المسافة المزدوجة، لذا فهي غير مرئية تمامًا في النص النهائي.
لمنع ذلك باستخدام التعابير النمطية: استخدم forbidden\s*word
لمنع ذلك دون استخدام التعابير النمطية: لم أجد حلاً.
استخدم الرموز السفلية لتجاوز حدود الكلمات:
بدون تعابير نمطية: إذا أحطت بكلمة مرصودة برموز سفلية، فسيتم طباعتها بخط مائل وسيتم السماح بها. لذا، _forbidden_ سيتم قبولها إذا كان فلترك هو forbidden.
مع التعابير النمطية: عادةً ما يتم التحقق من حدود الكلمات فقط عند استخدام \b، وفي هذه الحالة ستفوز الرموز السفلية. لذا، _forbidden_ سيتم قبولها إذا كان فلترك هو \bforbidden\b.
لمنع ذلك باستخدام التعابير النمطية: استخدم [\b\_] بدلاً من \b تعديل: يبدو أن هذا لا يعمل بشكل جيد.
قد يكون إزالة حدود الكلمات حلًا أيضًا، لكنك قد تخاطر بحظر كلمات مثل cumulative و title عن غير قصد
لمنع ذلك دون استخدام التعابير النمطية: لم أجد حلاً.
فقط لإعلامك، [] مخصصة لـ “فئات الأحرف”. في تعبيرات بيرل النمطية، وربما تعبيرات روبي، \b تمثل “حدود الكلمة” خارج فئة الأحرف و"حذف الخلف" داخل فئة الأحرف. في لغة C، ‘\b’ تمثل دائمًا حذف الخلف (<control-H> بدقة). حذف الخلف ليس حرفًا مفيدًا في معظم الأوقات، بينما حدود الكلمة مفيدة، ومن هنا جاء إعادة التعريف.
لاستخدام تعبير نمطي للقبض على “_forbidden_” أو “forbidden”، سأستخدم على الأرجح:
\b_?forbidden_?\b
(أعرف أيضًا كيفية ترميز جميع أحرفي باستخدام &#xXX; لتجنب حيل يونيكود أو التعبير النمطي.)