不允许不需要的字符在字段中输入

时间:2015-03-31 10:22:49

标签: javascript html angularjs ionic-framework

我有一个文本字段,我只想在其中输入数字。我使用type =“number”但我有一个问题,因为我无法得到小数点。所以我使用了一个在线发现的指令来限制来自输入的字母。

app.directive('onlyNum', function() {
        return function(scope, element, attrs) {

            var keyCode = [8,9,37,39,48,49,50,51,52,53,54,55,56,57,110];
            element.bind("keydown", function(event) {
                console.log($.inArray(event.which,keyCode));
                if($.inArray(event.which,keyCode) == -1) {
                    scope.$apply(function(){
                        scope.$eval(attrs.onlyNum);
                        event.preventDefault();
                    });
                    event.preventDefault();
                }

            });
        };
    })

它工作正常,但我可以输入@,$,!,#,&等字符。如何从输入中限制这些字符。

3 个答案:

答案 0 :(得分:1)

keyCode数组包含所有不需要的字符的ASCII代码。您可以在那里添加自己的数字,您可以从ascii图表中获取它们。例如@ = 64,$ = 36.请注意,大多数ASCII图表仅提供十六进制值,但数组包含十进制数字。

编辑:This chart还包含十进制数字:

答案 1 :(得分:1)

您可以在元素上侦听input事件,并通过定义允许的array字符并查看索引来查看是否允许最后输入的字符。如果不允许该字符,请将其删除:

var element = document.getElementById("inputfield");
var inputText = "";
var allowedInputs = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.'];
    element.oninput = function (event) {
    if(allowedInputs.indexOf(element.value.slice(event.srcElement.selectionEnd - 1, event.srcElement.selectionEnd)) == -1)
        element.value = element.value.substr(0, event.srcElement.selectionEnd - 1) + element.value.substr(event.srcElement.selectionEnd);
};
<input id="inputfield"/>

工作fiddle

您可以将要允许的所有字符添加到数组中。

编辑:我更新了代码,因此不能在现有字符之间输入不允许的字符。

答案 2 :(得分:0)

这是我的自定义指令,可以使用RegEx轻松调整以满足任何需求

http://plnkr.co/edit/dgRJkVeX6iwIbXuoMVSW?p=preview

.directive("numberValidation", function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, ele, attrs, ctrl) {
      ctrl.$parsers.unshift(function(value) {
        if (value) {
          var valid = value.match(/^\d+(,\d+)?$/)
          ctrl.$setValidity('invalidNumber', valid);
        }
        return valid ? value : undefined;
      });

    }
  }
});