如何使用jQuery计算字符串中字符出现的次数

5

我有一个文本框,希望能够计算出其中 '.' 出现的次数。

如果文本框里已经有了一个 '.',那么用户就不能再用键盘输入 '.'

以下是我的代码:

 $('.txt').keyup(function() {
            var ele = $(this).val();
            var contains = (ele.indexOf('.') > -1);
            if (contains) {
                var count = $(this).val().match(/./g);
                if (count > 1) {                    
                    var cont = $(this).val();
                    var str = $(this).val().length;

                    $(this).val(cont.substring(0, str));
                }                   
            }

        });

$(this).val().match(/./g) 返回的是 '.' 出现的位置,但我想要统计出现次数。

7个回答

8
您可以使用以下代码查找字符串中字符“.”出现的次数。
    var regex = new RegExp(/\./g)
    var count = "This is some text .".match(regex).length;

3
您的正则表达式需要更改。在正则表达式中,“.”代表所有字符。您需要转义“.”。可能像这样...
$(this).val().match(/\./g);

1
你可以尝试这个:

$('.txt').keyup(function() {
   var str = this.value;
   var a = str.split('.');
   if (a.length > 2) {
      this.value = a.slice(0, 2).join('.');//removes 2nd dot and the string following it
      //a[0] +='.'; this.value = a.join('');//only removes redundant dots (alternative)
   }
});

这里出现的次数是 a.length-1

jsfiddle


我该如何允许 1.1.2016 而不去掉两个句点,但不允许 1.1..2016 或其他重复的句点? - Abela

0

这正是你想要的..:) 这里有演示

转义字符并进行计数。

Javascript:

 $('.txt').keyup(function() {
            var ele = $(this).val();

                            alert(ele.match(/\./g).length);

        });

HTML

<textarea id="txt"></textarea>

0
尝试将以下 JavaScript 函数用于文本框的 onkeypress 或 onkeyup 事件,并像这样调用:onkeypress = "return (event,'txtid',9,2)"beforelength 是小数点前允许的数字数量,afterLength 是小数点后的数字长度。
function isNumberKey(event, obj, beforeLength, afterLength) {
    var keyCode1 = event.keyCode;

    var keyCode = 0;
    if (keyCode1 == 0)
        keyCode = event.which;
    else {
        keyCode = keyCode1;
    }

    //    alert(keyCode);
    //    alert(keyCode1);

    if ((keyCode >= 48 && keyCode <= 57) || keyCode == 46 || keyCode == 13 || keyCode == 27 || keyCode == 127) {
        var text = document.getElementById(obj).value;
        if (keyCode == 46 && keyCode1 == 0) {
            if (text.toString().indexOf(".") != -1) {
                return false;
            }
        }
        if (keyCode == 46) {
            if (text.toString().indexOf(".") != -1) {
                return false;
            }
        }

        //        if (!/^\d{0,10}(?:\.\d{0,2})?$/.test(text)) {
        //            return false;
        //        } else {
        //        }
        var splitText = text.split('.');
        if (splitText[0].length >= beforeLength) {
            if (keyCode == 46 && text.toString().indexOf(".") == -1) {
                return true;
            } else if (text.toString().indexOf(".") != -1) {
                return true;
            }
            return false;
        }
        //        if (splitText.length > 1 && splitText[1].length == afterLength) {
        //            return false;
        //        }
    }
    else {
        return GetDefault(event);
    }
    return true;
}

function GetDefault(event) {
    var keyCode = event.keyCode;
    if (keyCode == 0)
        keyCode = event.which;

    if (keyCode == 8 || keyCode == 9 || keyCode == 35 || keyCode == 36 || keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40 || keyCode == 46 || keyCode == 118) {
        return true;
    }
    return false;
}

0
如果您想要警告用户(或进行其他高级操作),并且因此需要计数,则需要添加长度:
$('.txt').keyup(function() {
    var ele = $(this).val();
    var i = ele.indexOf('.');
    if (i > -1) {
        var c = ele.match(/\./g).length);
        // ...
    }
});

如果你只是想删除这些点,那么你可以使用以下代码:
$('.txt').keyup(function() {
    $(this).val($(this).val().replace('.', ''));
});

0

我已经找到了方法....

var count = 0;
$('.txt').blur(function () 
{
   var t = $(this).val();
   if (t.indexOf('.') >= 0) 
   {
      var j = t.split('.');
      count = j.length - 1;                    
   }
   else 
   {
      count = -1;
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接