Javascript 不允许两个或多个零';s regex在自定义角度指令的开始处

Javascript 不允许两个或多个零';s regex在自定义角度指令的开始处,javascript,angularjs,regex,angularjs-directive,Javascript,Angularjs,Regex,Angularjs Directive,我正在写一个角度指令,它只允许用户在范围内的输入字段中输入数字 html代码 <input non-negative-number range-min="1" range-max="5000" ng-model="number1"> <input non-negative-number range-min="0" range-max="1000" ng-model="number2"> angular.module("NumberDirective", [])

我正在写一个角度指令,它只允许用户在范围内的输入字段中输入数字

html代码

<input non-negative-number range-min="1" range-max="5000" ng-model="number1">
     <input non-negative-number range-min="0" range-max="1000" ng-model="number2">
angular.module("NumberDirective", [])
   .directive('nonNegativeNumber', function() {
    return {
        restrict: 'A',
        require: '?ngModel',

        link: function (scope, element, attrs, ngModel) {
            var lastVal = null;
            if (!ngModel) { return; }

            ngModel.$parsers.push(function(val) {

                lastVal = ngModel.$modelValue;
                var pattern = /[^0-9]+/g;
                var parsed = val.replace(pattern, '');
                if (parseInt(parsed) > parseInt(attrs.rangeMax)) { parsed = lastVal; }
                if (parseInt(parsed) < parseInt(attrs.rangeMin)) { parsed = lastVal; }
                if (val !== parsed) {
                    lastVal = parsed;
                    ngModel.$setViewValue(parsed);
                    ngModel.$render();
                }
                return parsed;
            });

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

角度指令

<input non-negative-number range-min="1" range-max="5000" ng-model="number1">
     <input non-negative-number range-min="0" range-max="1000" ng-model="number2">
angular.module("NumberDirective", [])
   .directive('nonNegativeNumber', function() {
    return {
        restrict: 'A',
        require: '?ngModel',

        link: function (scope, element, attrs, ngModel) {
            var lastVal = null;
            if (!ngModel) { return; }

            ngModel.$parsers.push(function(val) {

                lastVal = ngModel.$modelValue;
                var pattern = /[^0-9]+/g;
                var parsed = val.replace(pattern, '');
                if (parseInt(parsed) > parseInt(attrs.rangeMax)) { parsed = lastVal; }
                if (parseInt(parsed) < parseInt(attrs.rangeMin)) { parsed = lastVal; }
                if (val !== parsed) {
                    lastVal = parsed;
                    ngModel.$setViewValue(parsed);
                    ngModel.$render();
                }
                return parsed;
            });

            element.bind('keypress', function(event) {
                if(event.keyCode === 32) {
                    event.preventDefault();
                }
            });
        }
    };
   });
angular.module(“NumberDirective”,[])
.directive('nonnegativeEnumber',function(){
返回{
限制:“A”,
要求:“?ngModel”,
链接:功能(范围、元素、属性、模型){
var lastVal=null;
if(!ngModel){return;}
ngModel.$parsers.push(函数(val){
lastVal=ngModel.$modelValue;
变量模式=/[^0-9]+//g;
var parsed=val.replace(模式“”);
if(parseInt(parsed)>parseInt(attrs.rangeMax)){parsed=lastVal;}
if(parseInt(parsed)
这很好,但我还需要一个正则表达式,它不能允许在输入开始时键入两个零

比如00,0000000000045,000000000000000000100

有人能推荐正确的正则表达式吗???

试试看

^[0]{0,1}[1-9]\d{0,}

^ asserts position at start of the string
Match a single character present in the list below [0]{0,1}
{0,1} Quantifier — Matches between zero and one times, as many times as possible, giving back as needed (greedy)
0 matches the character 0 literally (case sensitive)

Match a single character present in the list below [1-9]
1-9 a single character in the range between 1 (ASCII 49) and 9 (ASCII 57) (case sensitive)

\d{0,} matches a digit (equal to [0-9])
{0,} Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy)

Global pattern flags
g modifier: global. All matches (don't return after first match)

谢谢,我正在使用这样的var模式=/^[0]{0,1}[1-9]\d+/;但它仍然允许尽可能多的0,这在我的情况下是错误的,你想允许一个0,但不超过一个。如果我错了,请纠正我。我希望用户只能在数字的开头键入一个零,如01、02等,而不能键入001、00000001。有效输入:1、01、099、99等无效输入:001、0001、000099等修改正则表达式。签出。不工作我发现以下一个有用的/[^0-9]+/g这有一个问题,因为它允许在输入开始时有尽可能多的零,这是错误的,理想情况下,我希望在开始时允许一个零,但在开始时不允许更多的零有效输入应该是0,1,0109910010000000无效输入00001010000000