2009-05-19 9 views
0

Ich habe versucht, ein Sortier Problem mit der jQuery-Plugin tablesorter zu debuggen, die den folgenden Code verwendet für die Ziffern zu überprüfen: ‚‘Warum findet eine Übereinstimmung ein Ergebnis, während test für einen regulären Ausdruck in JavaScript den Wert false zurückgibt?

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)); 
      }; 

der Wert für config.decimal ist

Jetzt, wenn s = '0', schlägt dies fehl, aber wenn Sie stattdessen Übereinstimmung ausführen, scheint die RegEx wie erwartet positiv zu reagieren.

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

Wie ist diese Verarbeitung anders, um unterschiedliche Ergebnisse zu erhalten?

Nur für den Fall wollten Sie den HTML-Code, wo s abgeleitet (Die letzte Spalte wird als Text angezeigt):

<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> 

Ich verstehe, dass Test einen Booleschen Wert zurückgibt und Spiel einen String oder null zurückgibt.

ist die entscheidende Frage, warum nicht für diesen regulären Ausdruck ist:

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

entspricht:

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

Antwort

1

Ich denke, es ist ein bisschen ein seltsamer Zufall aufgrund der Funktion, die verwendet wird, um den regulären Ausdruck zu konstruieren.

Übereinstimmung ist ein Mitglied von String.

Test ist ein Mitglied von RegExp.

In der Funktion dort ist exp jedoch als String definiert. Technisch gesehen, führen Sie String's match() mit exp als String-Wert und nicht als regulären Ausdruck aus.

Das Ausführen von exp über einen RegExp-Konstruktor sollte dasselbe Ergebnis wie test() zurückgeben.

1

Spiel kehrt Array von Werten, Test boolean zurückgibt, auf einigen Motortest zunächst zurück Ergebnis

+0

OK, aber warum würde der Test nicht wahr werden, wenn das Spiel zu funktionieren scheint? – catalpa

0

Stellt sich heraus, es ist eine Umkehrung der entsprechenden Objekte.

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

sollte

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

Der ursprüngliche Code überprüft wurde nur sein, dass "0" in der RegEx String existierte

Noch ein Fehler in tablesorter zu sein scheint. Sie müssen den Parser als 'Ziffer' deklarieren, wenn 0 Werte in Ihrer Tabelle vorhanden sind. JQuery tablesorter problem