当前位置:  开发笔记 > 前端 > 正文

如何在Angular 2中添加表单验证模式?

如何解决《如何在Angular2中添加表单验证模式?》经验,为你挑选了4个好方法。

我有一个简单的表单,需要验证输入的开头和结尾是否不是空格.

在HTML5中,我将这样做:


新Angular 2 ngControl指令中验证模式的正确属性是什么?官方Beta API仍缺乏此问题的文档.



1> Kamil Kiełcz..:

现在,你不需要使用FormBuilder和所有这些复杂的valiation角度的东西.我从中提出了更多细节(Angular 2.0.8 - 3march2016):https: //github.com/angular/angular/commit/38cb526

回购示例:


我测试它,它的工作原理:) - 这是我的代码:

...

替代方法(2017年6月更新)

验证仅在服务器端进行.如果出现问题,则服务器返回错误代码,例如HTTP 400,并在响应正文中跟随json对象(例如):

this.err = { 
    "capacity" : "too_small"
    "filed_name" : "error_name", 
    "field2_name" : "other_error_name",
    ... 
}

在html模板中我使用单独的标签(div/span/small等)


{{ translate(err.capacity) }}

如果'capacity'是错误的话,那么带有msg翻译的标签将是可见的.这种方法有以下优点:

这很简单

避免前端的后端验证代码重复(对于regexp验证,这可以防止或复杂ReDoS攻击)

控制显示错误的方式(例如标签)

backend返回error_name,很容易在前端翻译成正确的语言

当然,如果在前端需要验证,有时我会例外(例如retypePassword,注册时的字段永远不会发送到服务器).



2> Chris Snowde..:

从版本2.0.0-beta.8(2016-03-02)开始,Angular现在包含一个Validators.pattern正则表达式验证器.

见CHANGELOG



3> gentiane..:

您可以使用FormBuilder构建表单,因为它可以让您更灵活地配置表单.

export class MyComp {
  form: ControlGroup;

  constructor(@Inject()fb: FormBuilder) {  
    this.form = fb.group({  
      foo: ['', MyValidators.regex(/^(?!\s|.*\s$).*$/)]  
    });  
  }

然后在你的模板中:


Please correct foo entry !

您还可以自定义ng-invalid CSS类.

由于实际上没有正则表达式的验证器,你必须自己编写.它是一个简单的函数,它在输入中获取一个控件,如果有效则返回null,如果无效则返回StringMap.

export class MyValidators {
  static regex(pattern: string): Function {
    return (control: Control): {[key: string]: any} => {
      return control.value.match(pattern) ? null : {pattern: true};
    };
  }
}

希望它能帮到你.


精确.但是,一年前,当答复是写作时,情况并非如此.

4> mani R..:

自定义验证一步一步

Html模板

  
  

 
field is required.
Special Characters are not Allowed

组件应用程序

import {Control, ControlGroup, FormBuilder, Validators, NgForm, NgClass} from 'angular2/common';
import {CustomValidator} from '../../yourServices/validatorService';

在类定义下

 demoForm: ControlGroup;
constructor( @Inject(FormBuilder) private Fb: FormBuilder ) {
    this.demoForm = Fb.group({
       spec: new Control('', Validators.compose([Validators.required,   CustomValidator.specialCharValidator])),
      })
}

在{ ../../yourServices/validatorService.ts }下

export class CustomValidator {
    static specialCharValidator(control: Control): { [key: string]: any } {
   if (control.value) {
       if (!control.value.match(/[-!$%^&*()_+|~=`{}\[\]:";#@'<>?,.\/]/)) {            
           return null;
       }
       else {            
           return { 'invalidChar': true };
       }
   }

 }

 }

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有