Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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日期格式验证_Javascript_Angularjs_Date - Fatal编程技术网

Javascript 输入类型日期的angularjs日期格式验证

Javascript 输入类型日期的angularjs日期格式验证,javascript,angularjs,date,Javascript,Angularjs,Date,我正在尝试使用AngularJS和按照文档创建日期 带有日期验证和转换的输入。在没有 但是支持HTML5日期输入,将使用文本元素。因为 在这种情况下,文本必须以有效的ISO-8601日期格式输入 (yyyy-MM-dd),例如:2009-01-06。因为很多现代浏览器都有 由于还不支持这种输入类型,因此为 用户通过占位符或标签输入预期的输入格式 它只接受有效的ISO-8601日期格式(yyyy-MM-dd) 我尝试在模式的属性中定义新的日期格式,如下代码所示: <div ng-app=""

我正在尝试使用AngularJS和按照文档创建日期

带有日期验证和转换的输入。在没有 但是支持HTML5日期输入,将使用文本元素。因为 在这种情况下,文本必须以有效的ISO-8601日期格式输入 (yyyy-MM-dd),例如:2009-01-06。因为很多现代浏览器都有 由于还不支持这种输入类型,因此为 用户通过占位符或标签输入预期的输入格式

它只接受有效的ISO-8601日期格式(yyyy-MM-dd)

我尝试在
模式的属性中定义新的日期格式,如下代码所示:

<div ng-app="">
  <form name="frmSPA" novalidate>
    <input type="date" placeholder="Enter SPA Date" pattern="dd/MM/yyyy" name="SPADate" ng-model="SPADate" ng-required="true" />
    <span ng-show="frmSPA.SPADate.$touched && frmSPA.SPADate.$error.required">SPA Date is required</span>
    <span ng-show="frmSPA.SPADate.$touched && frmSPA.SPADate.$error.date">Not a valid date</span>
  </form>
</div>

SPA日期是必需的
不是有效日期
但它不起作用


那么如何将默认日期格式更改为
dd/MM/yyyy
。以下是。

我认为您应该编写一个特别指令,以实现真正的跨浏览器兼容…
大概是这样的:

angular
    .module('MyApp', [])
    .controller('MainCtrl', function ($scope, dateFilter) {
        $scope.date = new Date();
    })
    .directive(
        'dateInput',
        function(dateFilter) {
            return {
                require: 'ngModel',
                template: '<input type="date"></input>',
                replace: true,
                link: function(scope, elm, attrs, ngModelCtrl) {
                    ngModelCtrl.$formatters.unshift(function (modelValue) {
                        return dateFilter(modelValue, 'dd-MM-yyyy');
                    });

                    ngModelCtrl.$parsers.unshift(function(viewValue) {
                        return new Date(viewValue);
                    });
                },
            };
    });
angular
.module('MyApp',[])
.controller('MainCtrl',函数($scope,dateFilter){
$scope.date=新日期();
})
.指令(
“dateInput”,
函数(日期过滤器){
返回{
要求:'ngModel',
模板:“”,
替换:正确,
链接:函数(范围、elm、属性、ngModelCtrl){
ngModelCtrl.$formatters.unshift(函数(modelValue)){
返回日期筛选器(modelValue“dd-MM-yyyy”);
});
ngModelCtrl.$parsers.unshift(函数(viewValue){
返回新日期(viewValue);
});
},
};
});

使用ng模式而不是模式。
还可以使用正则表达式而不是日期格式来正确验证日期

ng模式='/([0-2]?\d{1})|([3][0,1]{1}))/^[0,1]?\d{1}/([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$/'


这应该行得通。

使用这种ng模式也适用于闰年。适用于“MM dd YYYY”格式


(0[1-1-1-1-1-1-9[1-1-1-9[1-1-1-1[1-1[1-1[1-1-9[2-9-2-9[2-9-2-9[2-9[2-9-2-9[2-9[2-9[2-2-9][3[3[1-3[3[1-3[3-3-3[3-3-3-d \\\3-3[3-3-3-3 \3 55 5 5 5 \{{{{{{{{{}}}}}}}}}}((((((([2-5-5 5 5 5 5-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-2(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16 |[2468][048]|[3579][26])00)$/'

@RayonDabre我想给出的链接是关于如何设置日期显示格式的,但是我需要文本框来接受
dd/MM/yyyyy
格式我想这取决于您的系统日期的格式…不确定…@RayonDabre我正在使用
dd/MM/yyyy
格式您考虑过在我的系统日期上使用吗?它有你想要的一切,还有更多