如何在html中给出特定的输入类型?

Posted

技术标签:

【中文标题】如何在html中给出特定的输入类型?【英文标题】:How to give specific input type in html? 【发布时间】:2019-10-03 07:11:57 【问题描述】:

我有一个输入字段“尺寸”,它可以接受像(21 x 12, 12"4' x 21" 12' 这样的值。如何控制 html 中的输入字段,使其仅允许用户输入数字和(X,',""),并限制其他字符和字母?我使用 AngularJS 作为虚拟机控制器

<div class="clearfix">
    <div class="col-xs-4 pad-0">
        <label>Size</label>
    </div>
    <div class="col-xs-8 pad-col-7">
        <div class="form-group ">
            <md-input-container class="block typefield">
                <input type="number" ng-model="vm.MappedMediaLineItem.UnitSize">
            </md-input-container>
        </div>
    </div>
</div>

现在我使用类型作为数字,但它不允许我输入 X,',""

【问题讨论】:

这个问题:HTML5 restricting input characters 可能对你有帮助 【参考方案1】:

你可以试试这个

<div ng-app="myModule">
  <div ng-controller="myController">
      <input type="text" ng-model="searchTerms" ng-keypress="searchKeyup($event)"  placeholder="">
  </div>
</div>

在控制器中

var module = angular.module("myModule", []);
module.controller("myController", function($scope) 
    $scope.searchKeyup = function (e) 

       var keyCode = (e.keyCode ? e.keyCode : e.which);
    if ((keyCode >= 48 && keyCode <= 57) || (keyCode === 120) || (keyCode === 39) || (keyCode === 34))
        console.log("true");

    
    else
    console.log("false");
    e.preventDefault();
    
    ;
);

从这里知道密钥代码https://keycode.info/

【讨论】:

我在 true 条件下尝试了 vm.MappedMediaLineItem.UnitSize = vm.MappedMediaLineItem.UnitSize + $event.key ani vm.MappedMediaLineItem.UnitSize = vm.MappedMediaLineItem.UnitSize 在 false 条件下,结果我在 true 条件下得到两个值,在 false 条件下得到一个值,例如:- 如果我输入 x(这是有效)我在输入字段上得到 xx,如果我输入 p(这是错误条件)我在输入字段上得到 p 我该如何解决这个问题? 确保您的输入类型是文本而不是数字。 终于完成了,谢谢 keyCodewhich 均已弃用。您应该改用keycode。我还建议您看看这个其他关键检查工具:keyjs.dev【参考方案2】:

可以使用ng-pattern 指令:

<input ng-model="unitSize" ng-pattern="regex">

有关详细信息,请参阅

AngularJS ng-pattern Directive API Reference

The DEMO

angular.module("app",[])
.controller("ctrl", function($scope) 
  $scope.regex='[\\d+xX' + '\\"' + "\\'" + ']+';
)
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app" ng-controller="ctrl">
    unitSize=unitSize<br>
    <input ng-model="unitSize" ng-pattern="regex">
</body>

【讨论】:

【参考方案3】:

您可以使用正则表达式限制数字和乘号或其他自定义

<input ng-model="vm.MappedMediaLineItem.UnitSize"
       restrict-input="regex: '^[13579*]*$'"/> 

自定义限制 - 奇数只用乘法 - > vm.MappedMediaLineItem.UnitSize

app.directive('restrictInput', function() 
  return 
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attr, ctrl) 
      ctrl.$parsers.unshift(function(viewValue) 
        var options = scope.$eval(attr.restrictInput);
        if (!options.regex && options.type) 
          switch (options.type) 
            case 'digitsOnly': options.regex = '^[0-9]*$'; break;
            case 'lettersOnly': options.regex = '^[a-zA-Z]*$'; break;
            case 'lowercaseLettersOnly': options.regex = '^[a-z]*$'; break;
            case 'uppercaseLettersOnly': options.regex = '^[A-Z]*$'; break;
            case 'lettersAndDigitsOnly': options.regex = '^[a-zA-Z0-9]*$'; break;
            case 'validPhoneCharsOnly': options.regex = '^[0-9 ()/-]*$'; break;
            default: options.regex = '';
          
        
        var reg = new RegExp(options.regex);
        if (reg.test(viewValue))  //if valid view value, return it
          return viewValue;
         else  //if not valid view value, use the model value (or empty string if that's also invalid)
          var overrideValue = (reg.test(ctrl.$modelValue) ? ctrl.$modelValue : '');
          element.val(overrideValue);
          return overrideValue;
        
      );
    
  ;
);
也可以参考http://embed.plnkr.co/8NmBQm/

【讨论】:

以上是关于如何在html中给出特定的输入类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中排除特定类型的输入变量?

如何使用 html 文件选择器(输入类型 =“文件”)将照片上传到 facebook(图形 api)

如何根据Vue中给出的输入增加数量

如何检查 html 文本框中给出的 php 中的数据类型?

如何在 Django 中使用 HTML 输入类型文件作为 FileField 类型?

如何从分隔类型文件中的特定行打印特定字段