Javascript 角度文本区域指令:允许数字、不允许逗号、点?

Javascript 角度文本区域指令:允许数字、不允许逗号、点?,javascript,angularjs,angular-directive,Javascript,Angularjs,Angular Directive,我有一个textarea,它将多个值作为数组存储在ng模型中。按enter键并插入新的有效字符(数字和点)时,将在数组中创建一个新值 我正在尝试修改我在答案中找到的自定义指令。但我仍然有以下问题: 1-您仍然可以将不允许的连续点键入为(34…5)。 2-如果两次按下同一键,则接受该键,直到按下新键。例如,如果我按两次字符“d”,它将在文本区域内呈现。 3-我还希望指令将COMA转换为点(如果按下)。 4-新值必须以数字而不是点开始和结束。 5-每个阵列值仅一个点 这是我的密码: 视图/

我有一个textarea,它将多个值作为数组存储在ng模型中。按enter键并插入新的有效字符(数字和点)时,将在数组中创建一个新值

我正在尝试修改我在答案中找到的自定义指令。但我仍然有以下问题:

1-您仍然可以将不允许的连续点键入为(34…5)。
2-如果两次按下同一键,则接受该键,直到按下新键。例如,如果我按两次字符“d”,它将在文本区域内呈现。
3-我还希望指令将COMA转换为点(如果按下)。
4-新值必须以数字而不是点开始和结束。
5-每个阵列值仅一个点

这是我的密码:

视图/模板:

<script type="text/ng-template" id="form_field_float">
  <textarea only-digits class="form-control" rows="{{dbo.attributes[attobj.name].length + 2}}" ng-model="dbo.attributes[attobj.name]" ng-list="&#10;" ng-trim="false" ng-change="dbo._isDirty = true"></textarea>
</script>

replace()指令中的Ok正则表达式最终是解决方案:

模板:

<script type="text/ng-template" id="form_field_float">
  <textarea only-flo class="form-control" rows="{{dbo.attributes[attobj.name].length + 2}}" ng-model="dbo.attributes[attobj.name]" ng-list="&#10;" ng-trim="false" ng-change="dbo._isDirty = true"></textarea>
</script>

我希望这里最简单的方法是定义一个正则表达式(是的,我知道,两个问题等等),并在文本更改时检查它-如果文本不再匹配正则表达式,将其还原为旧值我尝试了正则表达式,但没有成功,也许我应该更努力…下面是一个JSFIDLE示例,说明我的意思是“好”!那就更好了!!谢谢
<script type="text/ng-template" id="form_field_float">
  <textarea only-flo class="form-control" rows="{{dbo.attributes[attobj.name].length + 2}}" ng-model="dbo.attributes[attobj.name]" ng-list="&#10;" ng-trim="false" ng-change="dbo._isDirty = true"></textarea>
</script>
  app.directive('onlyFlo', function () {

      return {
          restrict: 'A',
          require: '?ngModel',
          link: function (scope, element, attrs, ngModel) {
              if (!ngModel) return;
              ngModel.$parsers.unshift(function (inputValue) {

                  //var digits = inputValue.split('').filter(function (s) { return (!isNaN(s) && s != ' ' || s == '.'); }).join('');
                  var digits=  inputValue.replace(/\.{2,}/g, '.').replace(/e{2,}/gmi, 'e').replace(/[^0-9\.\n\r\-e]/gmi, '');
                  //var digits=  inputValue.split(/\s/).filter(function(s){return isNaN(s) ? false : s}).join('\r');
                  console.log('dig: ' +digits);
                  console.log(inputValue);

                  ngModel.$viewValue = digits;
                  ngModel.$render();
                  return digits;
              });
          }
      };
  });