5表单校验上

test() 方法用于检测一个字符串是否匹配某个模式.
目标
Angular的校验器:普通的方法
校验响应式表单
校验模板式表单

一、使用表单校验数据

1、angular中自带了三个常见的表单校验的是在Validators中的required,minLength,maxLength
2、自定义表单校验器(其实就一个函数,函数的参数是当前需要校验的行,返回一个任意对象)

格式

(1) xxx(control: AbstractControl): {[key: string]: any} {
    return null;
  }
(2)export function fnName(control:FormControl|FormGroup):any{

3、响应式表单字段中可以写三个值,第一个是返显到页面上的,第二个参数是校验器(可以是一组),第三个参数异步校验(常见判断手机号码,用户名是否重复注册)

演示例子:用户名的验证

export class ReactiveRegistComponent implements OnInit {
  formModel: FormGroup;
  /*方法*/
  xxx(control: AbstractControl): {[key: string]: any} {
    return null;
  }
  constructor(fb: FormBuilder) {
    this.formModel = fb.group({
     /* username: new FormControl(),*/
     username: ['', [Validators.required,  Validators.minLength(6)]], /*必填,最长6*/
      mobile: [''],
      passwordsGroup: fb.group({
         password: [''],
        confirmpass: ['']
        }),
      password: new FormControl(),
      confirmpass: new FormControl()
    });
  }
  onSubmit() {
    const isValid: boolean = this.formModel.get('username').valid; /*校验的结果布尔值*/
    console.log('username的校验结果是:' + isValid);
    const errors: any = this.formModel.get('username').errors; /*校验结果错误信息*/
    console.log('username的错误信息是' + JSON.stringify(errors));
    console.log(this.formModel.value);
  }
  ngOnInit() {
  }

}

二、自定义一个校验方法的步骤(手机号校验)

mobileValidator(control: FormControl): any {
    const mobieReg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
    const valid = mobieReg.test(control.value);
    console.log('mobile的校验结果是:' + valid);
    return valid ? null : {mobild : true}; /*返回空代表通过,valid为false的时候,返回对象,key,随便给一个值*/
  }

 constructor(fb: FormBuilder) {
    this.formModel = fb.group({
     /* username: new FormControl(),*/
     username: ['', [Validators.required,  Validators.minLength(6)]], /*必填,最长6*/

      mobile: ['', this.mobileValidator],

      passwordsGroup: fb.group({
         password: [''],
        confirmpass: ['']
        }),
      password: new FormControl(),
      confirmpass: new FormControl()
    });
  }

为了满足同时校验几个字段(密码校验)

equalValidator(group: FormGroup): any {
    const password: FormControl = group.get('password') as FormControl;
    const confirmpass: FormControl = group.get('confirmpass') as FormControl;
    const valid: boolean = (confirmpass.value === password.value);
    console.log('密码校验结果' + valid);
    return valid ? null : {equal: true};
  }
 constructor(fb: FormBuilder) {
    this.formModel = fb.group({
     /* username: new FormControl(),*/
     username: ['', [Validators.required,  Validators.minLength(6)]], /*必填,最长6*/
      mobile: ['', this.mobileValidator],


      passwordsGroup: fb.group({
         password: [''],
        confirmpass: ['']
        }, {validator: this.equalValidator}),/*group的校验这样写*/

    });
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML表单 在HTML中,表单是 ... 之间元素的集合,它们允许访问者输入文本、选择选项、操作对象等等,然后将...
    兰山小亭阅读 3,451评论 2 14
  • Angular 支持非常强大的内置表单验证,maxlength、minlength、required 以及 pat...
    sunny_lvy阅读 20,109评论 3 25
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13
  • angular提供了模板驱动和模型驱动两种方式来构建表单。模板驱动模式使用模板表单内置指令、内置校验的方式来构建表...
    oWSQo阅读 924评论 0 0
  • 最沉重的负担压得我们崩塌了,沉没了,将我们钉在地上。可是在每一个时代的爱情诗篇里,女人总渴望压在男人的身躯之下。也...
    会子阅读 7,265评论 33 25