2014-09-24 76 views
0
var SPECIAL_CHARS = Array("\x5B", "\x5C", "\x5D", "\x5E", "\x7B", "\x7C", "\x7D", "\x7E", 8364, 49792, 14844588, '�', '%', '/', '&','�','!','"','(',')','=','[','\\',']','^','{','|','}','~'); 
var dynamic_variables = Array("${nome}"); 

function charUsed(el) { 
    var base     = el; 
    var count     = base.val().length; 
    var chars     = base.val().split(""); 
    var numberOfSpecialChars = 0; 
    for (var k=0; k<chars.length; k++) { 
     if ($.inArray(chars[k], SPECIAL_CHARS) > -1) { 
      numberOfSpecialChars++; 
     } 
    } 

    if($.inArray(base.val(),dynamic_variables) != -1) 
    { 
     numberOfSpecialChars = numberOfSpecialChars+40; 
    } 

    return count + numberOfSpecialChars; 
} // function 

基本上,我需要統計textarea的長度,如果包含一些特殊字符(陣列SPECIAL_CHARS)數×2(到這裏,一切正常)。jQuery的檢查,如果一個數組的字符串值是一個textarea

現在我需要添加一些其他的話(沒有更多的字符),像${nome}

僞代碼:

if an element of array is in base.val(), add 40 to the numberOf SpecialChars 

當然,我的代碼不起作用。

回答

1

您可以遍歷dynamic_variables數組的元素,並使用Array.indexOf()檢查它們是否出現在主字符串中。如果這樣加40

,而不是

if($.inArray(base.val(),dynamic_variables) != -1) 
{ 
    numberOfSpecialChars = numberOfSpecialChars+40; 
} 

for(var i=0;i<dynamic_variables.length;i++) 
{ 
    if(base.val().indexOf(dynamic_variables[i]) != -1) { 
     numberOfSpecialChars += 40; 
    } 
} 
0

var SpecialChars = ['\x5B', '\x5C', '\x5D', '\x5E', '\x7B']; 
 
var SpecialWords = ['foo', 'bar']; 
 

 
function count(text) 
 
{ 
 
    var result = text.length; 
 
     
 
    // more effective lookup on big text and special char list 
 
    var charLookup = SpecialChars.reduce(function(r, v) 
 
    { 
 
    r[v] = true; 
 
    return r; 
 
    }, {}); 
 
    
 
    // count special chars 
 
    result += text.split('').reduce(function(r, v) 
 
    { 
 
    if(v in charLookup) 
 
    { 
 
     r += 1; 
 
    } 
 
    return r;  
 
    }, 0); 
 
    
 
    // count special words 
 
    result += SpecialWords.reduce(function(r, v) 
 
    { 
 
    r += (text.split(v).length - 1) * 40; 
 
    return r; 
 
    }, 0);  
 
     
 
    return result; 
 
} 
 

 
var result = count(document.getElementById('text').value); 
 
console.assert(result == 'bar some } text [ bar'.length + 2 * 1 + 2 * 40); 
 
document.getElementById('result').innerHTML = result;
<textarea id='text'>bar some { text [ bar</textarea> 
 
<div>Result: <span id='result'></span></div>

相關問題