【问题标题】:angular 5 validation date field using form builder使用表单生成器的角度 5 验证日期字段
【发布时间】:2018-12-13 13:54:19
【问题描述】:

我有表单,我想在提交时验证日期字段,我正在使用表单生成器,我该怎么做(角度方式)? 另一个问题为什么我看不到日期字段中的值 published_date ? 我尝试搜索,但找不到输入日期字段的解决方案。

unamePattern = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
  ngOnInit() {
    this.book = 
      {
        id: 55,
        author_name : "vv",
        published_date :  new Date('01/02/2018'),
        title : "cc"
      };
      
      this.form = this.formBuilder.group({
        title : ['', Validators.required],
        author : ['', Validators.required],
        datePublish: ['', Validators.pattern(this.unamePattern)],
        }
      );
  }
<input 
            [(ngModel)]="book.published_date"
            id="dateOfBirth" 
            class="form-control" 
            placeholder="yyyy-mm-dd" 
            name="dp" 
            ngbDatepicker 
            formControlName="datePublish"
            #dp="ngbDatepicker">
            
          <div class="input-group-append">
            <button class="btn btn-outline-secondary" (click)="dp.toggle()" type="button">
                <i class="fa fa-calendar" aria-hidden="true"></i>
            </button>
          </div>

【问题讨论】:

    标签: angular validation angular5 formbuilder angular-validator


    【解决方案1】:

    如果你可以使用momemt(),那么很容易掌握日期时间的东西,你可以编写自己的验证器

    import {AbstractControl} from '@angular/forms';
    import * as moment from 'moment';
    
    export class YourValidator {
      static dateVaidator(AC: AbstractControl) {
        if (AC && AC.value && !moment(AC.value, 'YYYY-MM-DD',true).isValid()) {
          return {'dateVaidator': true};
        }
        return null;
      }
    }
    

    在你的表单对象中你可以像使用它一样

    import {YourValidator} from "....";
    
    this.form = this.formBuilder.group({
        title : ['', Validators.required],
        author : ['', Validators.required],
        datePublish: ['', Validators.compose([Validators.required, YourValidator.dateVaidator])],
    });
    

    Demo stackblitz.com/angular-date-validator

    【讨论】:

    • 当我尝试插入文本而不是日期时,它仍然有效。我不知道为什么
    • @Asafshay 我添加了演示链接来测试上面的验证器看看stackblitz.com/angular-date-validator
    【解决方案2】:

    对于日期验证,您可以使用ng4-validators

    npm i ng4-validators --save
    

    导入和使用:

    import { CustomValidators } from 'ng4-validators';
    
    ngOnInit() {
      this.book = 
        {
          id: 55,
          author_name : "vv",
          published_date :  new Date('01/02/2018'),
          title : "cc"
        };
    
        this.form = this.formBuilder.group({
          title : ['', Validators.required],
          author : ['', Validators.required],
          datePublish: ['', CustomValidators.date,
          }
        );
      }
    

    【讨论】:

    • 该项目现已弃用,您现在应该使用 npmjs.com/package/ngx-custom-validators 。但除此之外,这就是我一直在寻找的答案。
    • 它不允许自定义格式。英制格式例如:DD/MM/YYYY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2019-07-04
    • 2020-12-29
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多