2016-07-25 126 views
1

我使用角度js和以下是我的代码,它只允许用逗号分隔的数字。但我使用的正则表达式允许用户输入1 ,,, 2。只允许输入字段中逗号分隔的数字使用角度js

有什么办法可以限制用户在每个数字后只输入一个逗号吗?

Plunker - http://plnkr.co/edit/g1X9ldVuH4ZewAlumM1P?p=preview

function NumberValidator() { 
    return { 
     require: '?ngModel', 
     link: function(scope, element, attrs, ngModelCtrl) { 
      if (!ngModelCtrl) { 
       return; 
      } 

      ngModelCtrl.$parsers.push(function(val) { 
       var clean = val.replace(/[^\d+(,\d+)*$]/g, ''); 
       if (val !== clean) { 
        ngModelCtrl.$setViewValue(clean); 
        ngModelCtrl.$render(); 
       } 
       return clean; 
      }); 

      element.bind('keypress', function(event) { 
       if (event.keyCode === 32) { 
        event.preventDefault(); 
       } 
      }); 
     } 
    }; 

回答

2

卸下clean部分并替换如果条件与,

if (!/^\d+(?:,\d+)*$/.test(val)) { 

该代码将测试给定的值是否在1,2,313,4格式或不。

例子:

console.log(!/^f+$/.test('ff')) 
 

 
console.log(!/^f+$/.test('df'))

想你想这样的事情,

str.replace(/[^\d,]|^,+|,+$|,+(?=,)/gm, '') 

PLNKR

+0

这将如何工作,因为我想RES指示用户输入数字,然后在文本框中输入逗号,所以我使用替换函数 – Nagendra

+0

不需要替换函数。只需用这个'^ \ d +(?:,\ d + )* $'正则表达式。如果不是这样,那么以红色显示框。如果它是真的,那么以绿色显示它。 –

+0

我不想更改文本框的颜色。即使用户按其他字符,它不应该显示在文本框中,因此我正在使用替换 – Nagendra

相关问题