عندما ينجح التطابق، سيتم تضمين أي رقم يسبق الكلمة المطابقة مباشرةً في نتيجة التطابق، وينطبق هذا حتى على أحرف يونيكود (Unicode).
الأرقام التي تلي الكلمة المطابقة مباشرةً لا تُظهر هذا السلوك؛
يؤثر هذا أيضًا على مطابقة الأرقام، بما في ذلك الحالات التي تتكون فيها السلاسل النصية من أحرف إنجليزية وأرقام فقط. على سبيل المثال، يمكن لـ “Test123” أن تطابق “Test” فقط ولكن لا يمكنها مطابقة “123” أو “Test123” (نفسها).
قد أكون متأخراً قليلاً في هذا الأمر - ما هو نوع قاعدة المطابقة هذه؟ هل يمكن لأحد أن يشرحها لي؟
يبدو أنه خطأ محتمل في التعابير النمطية (regex)، والتي يصعب دائمًا فك تشابكها. @zogstrip ربما يمكنك إلقاء نظرة بما أنك عملت في هذا المجال مؤخرًا (على الرغم من أن هذا يبدو موجودًا منذ فترة).
إليك فهمي…
عندما نتحقق من الكلمات، هناك 3 مقاطع يجب أن تتطابق: البادئة، الكلمة، اللاحقة. لقد قمنا بتعيين البادئة واللاحقة لتكون أحرفًا غير أبجدية… يمكن أن تكون هذه علامات ترقيم أو مسافات أو أو أرقام. الأرقام هي ما يسبب عدم تطابق هنا. القصد هو أن نتمكن من التقاط الكلمات حتى لو كانت هناك علامات ترقيم أو ما شابه قبل/بعد الكلمة.
لذا، يرى التعبير النمطي 123Test، ويجد Test، وينظر قبلها ويجد 3 وهذا يتطابق كـ “غير حرفي”، ثم ينظر بعدها ويجد نهاية الكلمة. لذا فهو يتطابق مع 3Test.
أعتقد أننا بحاجة إلى التحقق من الأحرف غير الأبجدية و غير الرقمية في مقاطع البادئة/اللاحقة لتجنب ذلك؟ لست متأكدًا مما إذا كان هناك سبب لعدم تضمين الأرقام أو إذا كان مجرد سهو.
هذا من شأنه أن يصلح الأمر لـ المرة الأخيرة. لقد واجهنا بعض عدم الاتساق بين إصدار Ruby وإصدار JS للتعبيرات النمطية المستخدمة ولكن هذا أصبح الآن غير ضروري.