我希望能够计算textarea中的字符数,并在客户用完字符时向客户报告。我做得很好,但现在我需要添加更多的功能,我迷失在哪里开始。
基本上,除了普通字符外,客户还可以通过按钮向文本框添加标签(已经完成)。标签以下列格式插入到内容中:
一些含有更多内容的随机内容[标签]
我希望能够测量字符的数量以及[tag]出现的位置,总共添加20个字符。当删除[tag]或[tag]的一部分时,它也会删除其他字符。
我的基本版本有效,但无法确定何时删除标记。
function countCharacters(totalTags){
var new_length = $('#t_text').val().length;
if (new_length < 10){
totalTags=0;
}
additionalcharacters = totalTags*10;
var new_length = $("#t_text").val().length+additionalcharacters;
if(new_length <= 154) {
$('#charlimitinfo').removeClass('red');
$('.cost').html('1');
} else if(new_length >= 154 && new_length <= 308) {
$('#charlimitinfo').removeClass('red');
$('.cost').html('2');
} else if(new_length >= 308 && new_length <= 462) {
$('#charlimitinfo').removeClass('red');
$('.cost').html('3');
} else if(new_length >= 462 && new_length <= 606) {
$('#charlimitinfo').removeClass('red');
$('.cost').html('4');
} else if(new_length >= 606 && new_length <= 616) {
$('#charlimitinfo').addClass('red');
$('.cost').html('5');
}
else {
if(new_length >= 616){
$('#t_text').next('#charlimitinfo').addClass('red');
$('#charlimitinfo').html('You have reached 616 characters!');
this.value = this.value.substring(0, 616);
return false;
}
else{
$('#charlimitinfo').removeClass('red');
$('#charlimitinfo').html((616 - new_length) +'<span>characters left</span>');
return true;
}
}
$('#charlimitinfo').html(new_length);
}
t_text = textarea totalTags =每次单击标签按钮并插入标签时的计数器。
希望有人可以提供帮助,因为这可以解决我的问题。
干杯
戴夫
答案 0 :(得分:4)
有趣的问题。我可能用正则表达式处理它,而不是使用标记计数器:
function countCharacters()
{
var text = $('#t_text').val(),
tags = ['tag', 'tag2'], // An array of your tags
i,
matches,
regex,
extraCharacters = 0,
totalCharacters;
for (i = 0; i < tags.length; i++)
{
regex = new RegExp('\\[' + tags[i] + '\\]', 'g');
matches = text.match(regex) || [];
extraCharacters += (matches.length * 20) - (matches.length * (tags[i].length + 2));
}
totalCharacters = text.length + extraCharacters;
// Do your if statements/style changes/etc. here
}
这有几个假设:
这个解决方案的一大优势是,如果有人手动插入标签,这将抓住它,而标签计数器则不会。
修改强>
代码未经测试,正则表达式可能是贪婪的(首先匹配最长的匹配)。现在测试。
修改2
好的,代码严重错误。弄清楚它是什么。
编辑3
当用字符串制作正则表达式时,你必须双重转义特殊字符:new RegExp('\\[' + tags[i] + '\\]', 'g')
- 一次用于字符串,一次用于正则表达式。此外,如果未找到匹配项,string.matches(regex)
将返回null,因此我们将其与空数组进行OR运算,并在计算中使用matches
的长度。
曼。我输了编码。 :-D