如果文本区域中有特殊的代码,我想忽略对文本中字符长度的计数。我的意思是不计算文本中的特殊代码字符。我使用特殊代码来定义文本中的输入笑脸。我只想计算文本的长度,忽略特殊代码。
以下是我尝试编写的大致代码,但无法正常工作:
// smileys
// =======
function smileys(){
var smile = new Array();
smile[0] = "[:rolleyes:]";
smile[1] = "[:D]";
smile[2] = "[:blink:]";
smile[3] = "[:unsure:]";
smile[4] = "[8)]";
smile[5] = "[:-x]";
return(smile);
}
// symbols length limitation
// =========================
function minSymbols(field){
var get_smile = smileys();
var text = field.value;
for(var i=0; i<get_smile.length; i++){
for(var j=0; j<(text.length); j++){
if(get_smile[i]==text[j]){
text = field.value.replace(get_smile[i],"");
}
}
}
if(text.length < 50){
document.getElementById("saveB").disabled=true;
} else {
document.getElementById("saveB").disabled=false;
}
}脚本应该是怎样的才能让它工作?谢谢!
发布于 2010-04-07 23:15:09
function minSymbols(field){
var get_smile = smileys();
var text = field.value;
for(var i=0; i<get_smile.length; i++){
text = text.replace(get_smile[i],"");
}
}发布于 2010-04-07 23:37:06
我会从改变我对笑脸的定义开始:
var smilies = [
{text: "[:rolleyes:]", exp: /\[\:rolleyes\:\]/g},
{text: "[:D]", exp: /\[\:D\]/g},
{text: "[:blink:]", exp: /\[\:blink\:\]/g},
{text: "[:unsure:]", exp: /\[\:unsure\:\]/g},
{text: "[8)]", exp: /\[8\)\]/g},
{text: "[:-x]", exp: /\[\:-x\]/g}
];(我没有立即看到这必须是一个函数的任何原因,但如果您愿意,您可以使其成为一个函数。)这是一个对象数组,每个对象都有一个带有笑脸文本的text属性和一个带有匹配它的RegExp的exp对象(设置了全局标志)。
然后该函数看起来有点像这样:
function getLengthMinusSmilies(field) {
var text, index, length, smiley;
text = field.value;
length = text.length;
for (index = 0; index < smilies.length; ++index) {
smiley = smilies[index];
while (smiley.exp.test(text)) {
length -= smiley.text.length;
}
}
return length;
}这避免了创建和丢弃临时字符串。它只计算笑脸的匹配度,而不考虑它们的长度。
您不必使用具有text和exp值的对象,如果您愿意,可以使用并行数组:
var smilies = [
"[:rolleyes:]",
"[:D]",
"[:blink:]",
"[:unsure:]",
"[8)]",
"[:-x]"
];
var matchExps = [
/\[\:rolleyes\:\]/g,
/\[\:D\]/g,
/\[\:blink\:\]/g,
/\[\:unsure\:\]/g,
/\[8\)\]/g,
/\[\:-x\]/g
];然后,...and相应地调整函数中的循环。将一个数组与对象一起使用往往更易于维护,但如果您需要在其他地方使用数组...
发布于 2010-04-07 23:27:45
function getTxtLen()
{
var str=document.getElementById('myTxtBox').value;
str=str.replace(/\[:some:\]/g,'');
str=str.replace(/\[:some2:\]/g,'');
alert(str.length);
}https://stackoverflow.com/questions/2593580
复制相似问题