لماذا تطابق تجد نتيجة لذلك في حين يعود اختبار كاذبة للتعبير عادي في جافا سكريبت؟
-
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