Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有正则表达式和年份日期输入字段的AngularJS ng模式函数_Javascript_Regex_Angularjs - Fatal编程技术网

Javascript 带有正则表达式和年份日期输入字段的AngularJS ng模式函数

Javascript 带有正则表达式和年份日期输入字段的AngularJS ng模式函数,javascript,regex,angularjs,Javascript,Regex,Angularjs,我的客户请求向文本输入中添加唯一的表单验证规则,该规则只包含4位数字,不包含字符。输入仅应采用2015年等年份格式。问题是,客户端不希望用户输入的年份少于当前年份,并且不能超过当前年份的10年 所以我创建了一个如下的函数: $scope.startYearPattern = function() { var date = new Date(); var year = date.getFullYear(); var regex = /^[0-9]{2}$/;

我的客户请求向文本输入中添加唯一的表单验证规则,该规则只包含4位数字,不包含字符。输入仅应采用2015年等年份格式。问题是,客户端不希望用户输入的年份少于当前年份,并且不能超过当前年份的10年

所以我创建了一个如下的函数:

$scope.startYearPattern = function() {
      var date = new Date();
      var year = date.getFullYear();
      var regex = /^[0-9]{2}$/;
      if(EditProgCtrl.programDetails.academicYear > year && EditProgCtrl.programDetails.academicYear < year + 10 && regex);
        };
在html上,我有:

<div class="col-xs-6 form-horizontal program-edit" data-ng-class="{ 'has-error': programEditForm.academicYear.$invalid && programEditForm.academicYear.$touched }">
                    <div class="form-group required">
                        <label for="academicYear" class="col-xs-4 horizontal-left control-label">
                            Start Year
                        </label>
                        <div class="col-xs-6 program-edit">
                            <input type="text" ng-pattern="startYearPattern()" class="form-control input-sm" max="3000" name="academicYear" id="academicYear" data-ng-model="EditProgCtrl.programDetails.academicYear" title="Please enter a valid year" required="required" />
                            <div data-ng-if="programEditForm.academicYear.$touched" data-ng-messages="programEditForm.academicYear.$error">
                                <span class="help-block" data-ng-message="required">required field</span>
                                <span class="help-block" data-ng-message="pattern">Wrong Year Format</span>
                            </div>
                        </div>
                    </div>
                </div>

但它不起作用,所以我遗漏了一些东西,只是不知道出了什么问题。

ng模式通常只接受类似ng模式的模式=/^[0-9]{4}$/我想。我给你写了一个验证指令

myModule.directive('academicYearValidation', academicYearValidation );
function academicYearValidation() {
    return {
       restrict: 'A',
       require: 'ngModel',
       link: link
    }
   function link (scope, element, attrs, ngModel) {

       function validator(modelValue, viewValue) {
          var value = modelValue || viewValue;
          var date = new Date();
          var year = date.getFullYear();
          var regex = /^[0-9]{4}$/;

          if(regex.test(value) && value > year && value < year + 10){
              return true;
          }else{
              return false;
          }
        }
        ngModel.$validators.academicyearvalidation = validator;
    }
};
ngModel.$validators在angular 1.3中是新的,在1.3U必须使用ngModel.$Parser和ngModel.$formatters之前


我给你做了一个plunker

^[0-9]{2}$只匹配两位数字。请尝试使用此^[0-9]{4}$作为4位数字。返回语句缺失,ifreturn语句的正文没有帮助我已将正则表达式更改为^[0-9]{4}$我现在在指令中有此项,但我收到一个错误,如acedemicYear未定义ifscope.programDetails.academicYear>year&&scope.programDetails.academicYear