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) 给了我出现'.'的索引 但我想计算它的出现次数。

4

7 回答 7

8

您可以使用以下代码查找字符“。”的次数。出现在字符串中。

    var regex = new RegExp(/\./g)
    var count = "This is some text .".match(regex).length;
于 2013-07-09T06:11:11.210 回答
3

您的正则表达式需要更改。“。” 在正则表达式中意味着一切。您需要转义“。”。大概是这样的……

$(this).val().match(/\./g);
于 2013-07-09T06:07:16.027 回答
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

于 2013-07-09T07:53:05.187 回答
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;
   }
}
于 2014-03-18T05:28:32.757 回答
0

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

逃脱角色并计算它。

Javascript:

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

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

        });

HTML

<textarea id="txt"></textarea>
于 2013-07-09T06:08:40.310 回答
0

在 tex 框的 onkeypress 或 onkeyup 事件上尝试下面的 javascript 函数

像这样打电话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;
}
于 2013-07-09T06:14:32.100 回答
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('.', ''));
});
于 2013-07-09T06:22:32.113 回答