المشكلة في الكود الحالي هي أن التعبير العادي (Regular Expression) الذي تستخدمه في الدالة removeParam
لا يقوم بإزالة المعلمة بشكل صحيح. لفهم الخطأ، دعني أشرح الكود بشكل أدق.
في الدالة removeParam
، تقوم بتعريف تعبيرين عاديين لإزالة المعلمتين start_date
و end_date
من الرابط. ولكن النمط الذي تستخدمه في الكلمات المتعلقة بـ start_date
و end_date
غير صحيح.
على سبيل المثال، في التعبير الأول /([&\?]start_date=*$|start_date=*&|[?&]start_date=(?=#))/
، هناك بعض المشاكل. العبارة ([&\?]start_date=*$|start_date=*&)
تحاول العثور على start_date
وتأكد من وجودها بعد الرمز ?
أو &
، ولكنها قد لا تعمل بالشكل المرجو بسبب الرمز &
الذي يُستخدم لتمثيل رمز &
في HTML entities. علاوة على ذلك، الجزء الذي يلي start_date
يحتوي على *
الذي لا يستخدم بشكل صحيح هنا.
لتصحيح الكود، يجب تصحيح التعبير العادي ليتوافق مع بنية الرابط وتنسيقه بشكل صحيح. يمكننا تبسيط الكود باستخدام تعبيرات عادية أقل تعقيدًا. فيما يلي كيف يمكننا تعديل الدالة لتحقيق الغرض المطلوب:
javascriptfunction removeParam(uri, paramToRemove) {
var pattern = new RegExp('([&?])' + paramToRemove + '=[^&]*(&|$)', 'g');
return uri.replace(pattern, '$1').replace(/&$/, '').replace(/[?&]$/, '');
}
// استخدام الدالة لإزالة المعلمات
var url = 'test.html?dir=asc&end_date=2016-09-23&order=created_at&start_date=2016-08-14';
url = removeParam(url, 'start_date');
url = removeParam(url, 'end_date');
console.log(url);
تعمل الدالة removeParam
الآن عن طريق استخدام تعبير عادي جديد يتم تكوينه بشكل ديناميكي ليتماشى مع المعلمة التي تريد إزالتها. يتم استبدال هذه المعلمة وأي قيمة مرتبطة بها بفارغ، ومن ثم يتم إزالة أي علامات &
زائدة أو علامات ?
في نهاية الرابط بعد الإزالة.
المزيد من المعلومات
بعد تصحيح الكود، يمكننا الآن استكمال المقال بشرح أكثر تفصيلًا حول الطريقة التي تعمل بها الدالة المصححة وكيف يمكن استخدامها بشكل صحيح لإزالة المعلمات من عناوين URL.
عندما ننظر إلى الكود المصحح، نرى أن الدالة removeParam
تستقبل اثنين من الباراميترات: uri
الذي يمثل عنوان URL الذي نريد تعديله و paramToRemove
الذي يمثل اسم المعلمة التي نريد إزالتها.
داخل الدالة، يتم بناء نمط التعبير العادي (Regex pattern) بشكل ديناميكي باستخدام قيمة المعلمة التي نريد إزالتها. ثم يتم استخدام هذا النمط للبحث عن المعلمة في عنوان الـ URL وإزالتها بالشكل الصحيح.
من الجدير بالذكر أن الدالة تأخذ في الاعتبار الحالات المختلفة التي قد تظهر في عناوين URL، مثل وجود المعلمة في بداية العنوان أو في وسطه أو حتى في نهايته. كما أنها تتعامل مع الرموز المشتركة مثل &
لفصل بين المعلمات.
باستخدام هذه الدالة، يمكن للمطورين الآن بسهولة تنظيف عناوين الـ URL من المعلمات غير المرغوب فيها بدون الحاجة إلى كود معقد أو تعديلات كبيرة. يمكنهم ببساطة استدعاء الدالة مرتين لإزالة المعلمتين start_date
و end_date
كما هو موضح في المثال الأخير بالكود.
هذا الأسلوب يساعد على جعل الكود أكثر فعالية وسهولة في الصيانة، كما يساهم في تحسين تجربة المستخدم وجودة البرمجيات عمومًا.