لماذا تطابق تجد نتيجة لذلك في حين يعود اختبار كاذبة للتعبير عادي في جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/883625

  •  22-08-2019
  •  | 
  •  

سؤال

وكنت أحاول تصحيح مسألة الفرز مع البرنامج المساعد مسج <م> tablesorter الذي يستخدم التعليمة البرمجية التالية للتحقق من الأرقام:

this.isDigit = function(s,config) {
                var DECIMAL = '\\' + config.decimal;
                var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
                return RegExp(exp).test($.trim(s));
            };

وقيمة config.decimal هو '.'

والآن إذا ق = "0" هذا فشل، ولكن إذا قمت بتشغيل المباراة بدلا من ذلك باستخدام التعابير المنطقية يبدو أن الاستجابة بشكل إيجابي كما هو متوقع.

return exp.match($.trim(s)) != null

وكيف هي هذه المعالجة بشكل مختلف من أجل العودة إلى نتائج مختلفة؟

وفقط في حال كنت أرغب في HTML حيث يتم اشتقاق الصورة (ويعتبر العمود الأخير كنص):

<tr class="">
  <td><a href="#">Click</a></td>
  <td>Annen Woods</td>
  <td>131</td>
  <td>20</td>        
  <td>5</td>
  <td>3</td>
  <td>12</td>
  <td>6</td>
  <td>50%</td>
  <td>0</td>    
</tr>

وأنا أفهم أن اختبار بإرجاع قيمة منطقية المباراة بإرجاع سلسلة أو فارغة.

والسؤال الأساسي هو لماذا ليس لهذا التعبير العادية:

return RegExp(exp).test($.trim(s));

وما يعادل:

return exp.match($.trim(s)) != null
هل كانت مفيدة؟

المحلول

واعتقد انها قليلا من صدفة غريبة يرجع ذلك إلى وظيفة المستخدمة في بناء التعبير العادي.

والمباراة هي عضو في سلسلة.

والاختبار هو عضو في التعبير العادي.

ولكن في وظيفة هناك، يتم تعريف عملي كسلسلة. لذلك، من الناحية الفنية، كنت تقوم بتشغيل مباراة سلسلة ل() باستخدام إكسب كقيمة سلسلة، وليس كتعبير عادي.

وتشغيل إكسب من خلال منشئ التعبير العادي يجب إرجاع نفس النتيجة مثل اختبار () سوف.

نصائح أخرى

وعوائد المباراة مجموعة من القيم، واختبار بإرجاع منطقية، على بعض اختبار محرك بإرجاع النتيجة الأولى

وتبين انها عكس الكائنات الملائمة.

return exp.match($.trim(s)) != null

يجب أن يكون

return $.trim(s).match(exp) != null

والرمز الأصلي كان مجرد التحقق من أن "0" موجودة في سلسلة باستخدام التعابير المنطقية

ومع ذلك يبدو أن هناك خطأ في tablesorter. لديك ليعلن محلل ب "أرقام" إذا 0 القيم موجودة في الجدول الخاص بك. مسج مشكلة tablesorter

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top