首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript:计算文本中的最小字符长度,忽略其中的特殊代码

JavaScript:计算文本中的最小字符长度,忽略其中的特殊代码
EN

Stack Overflow用户
提问于 2010-04-07 23:09:21
回答 3查看 1K关注 0票数 1

如果文本区域中有特殊的代码,我想忽略对文本中字符长度的计数。我的意思是不计算文本中的特殊代码字符。我使用特殊代码来定义文本中的输入笑脸。我只想计算文本的长度,忽略特殊代码。

以下是我尝试编写的大致代码,但无法正常工作:

代码语言:javascript
复制
// 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;
}
}

脚本应该是怎样的才能让它工作?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-07 23:15:09

代码语言:javascript
复制
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],"");
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-04-07 23:37:06

我会从改变我对笑脸的定义开始:

代码语言:javascript
复制
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对象(设置了全局标志)。

然后该函数看起来有点像这样:

代码语言:javascript
复制
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;
}

这避免了创建和丢弃临时字符串。它只计算笑脸的匹配度,而不考虑它们的长度。

您不必使用具有textexp值的对象,如果您愿意,可以使用并行数组:

代码语言:javascript
复制
var smilies = [
    "[:rolleyes:]",
    "[:D]",
    "[:blink:]",
    "[:unsure:]",
    "[8)]",
    "[:-x]"
];

var matchExps = [
    /\[\:rolleyes\:\]/g,
    /\[\:D\]/g,
    /\[\:blink\:\]/g,
    /\[\:unsure\:\]/g,
    /\[8\)\]/g,
    /\[\:-x\]/g
];

然后,...and相应地调整函数中的循环。将一个数组与对象一起使用往往更易于维护,但如果您需要在其他地方使用数组...

票数 2
EN

Stack Overflow用户

发布于 2010-04-07 23:27:45

代码语言:javascript
复制
function getTxtLen()
{
    var str=document.getElementById('myTxtBox').value;

        str=str.replace(/\[:some:\]/g,'');
        str=str.replace(/\[:some2:\]/g,'');

        alert(str.length);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2593580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档