当前位置: 首页 > 知识库问答 >
问题:

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

蓬野
2023-03-14

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

在HTML5中,我将这样做:

<input type="text" pattern="^(?!\s|.*\s$).*$">

在新的Angular 2 ngControl指令中,验证模式的正确属性是什么?官方的Beta API在这个问题上仍然缺乏留档。

共有3个答案

百里鸿祯
2023-03-14

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

export class MyComp {
  form: ControlGroup;

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

然后在您的模板中:

<input type="text" ngControl="foo" />
<div *ngIf="!form.foo.valid">Please correct foo entry !</div> 

您还可以自定义无效的CSS类。

由于regex实际上没有验证器,所以您必须编写自己的验证器。它是一个简单的函数,在输入中接受一个控件,如果有效则返回null,如果无效则返回StringMap。

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

希望它能帮助你。

滕无尘
2023-03-14

自版本2.0.0-beta.8 (2016-03-02)以来,Angular现在包括一个Validators.patternregex验证器。

查看更改日志

欧阳狐若
2023-03-14

现在,您不需要使用FormBuilder和所有这些复杂的组件。我在此(Angular 2.0.8-2016年3月3日)提供了更多细节:https://github.com/angular/angular/commit/38cb526

回购的例子:

<input [ngControl]="fullName" pattern="[a-zA-Z ]*">

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

<form (ngSubmit)="onSubmit(room)" #roomForm='ngForm'  >
...
<input 
  id='room-capacity' 
  type="text" 
  class="form-control" 
  [(ngModel)]='room.capacity' 
  ngControl="capacity" 
  required
  pattern="[0-9]+" 
  #capacity='ngForm'>

验证仅在服务器端进行。如果出现错误,则服务器返回错误代码,例如HTTP 400和响应体中的以下json对象(例如):

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

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

<input [(ngModel)]='room.capacity' ...>
<small *ngIf="err.capacity" ...>{{ translate(err.capacity) }}</small>

如果in'capacity'为错误,则带有msg翻译的标记将可见。这种方法有以下优点:

  • 这很简单

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

 类似资料:
  • 在中有一个方法,但它看起来不像是一个公共API,所以我宁愿不使用它。创建自定义指令并使用看起来是另一种选择,但基本上需要为每个自定义验证规则创建一个指令,而我不希望这样做。 实际上,在最简单的场景中,将控制器中的某个字段标记为无效(同时保持同步)可能是我完成任务所需要的,但我不知道如何做到这一点。

  • 问题内容: 我有一个带有输入字段和通过添加属性等进行验证设置的表单。但是对于某些领域,我需要做一些额外的验证。我将如何“利用” 控制的验证? 自定义验证可能类似于“如果填写了这3个字段,则此字段是必需的,并且需要以特定方式进行格式化”。 有一个方法,但是看起来不像公共API,所以我宁愿不使用它。创建自定义指令并使用它看起来像另一个选项,但是基本上需要我为每个自定义验证规则创建一个指令,而这是我所不

  • 我如何在下拉选择菜单上添加验证我有代码,我正在处理,但问题是没有工作没有显示错误消息。我想显示错误消息,如果下拉选择值不应该在点击添加到购物车按钮之前选择?

  • 我一直在使用https://github.com/stepstone-tech/android-material-stepper中的stepper库 我已经为步进器创建了碎片和适配器。它运行时没有错误。每个片段都有一些表单元素。 代码如下:

  • def validate_mobile_number(value):如果不是str(value).isdigit():引发ValidationError(“请输入有效的手机号码”)类ModelA(AbstractUser): mobile=models.CharField(u(“mobile”),unique=True,max_length=10,验证器[validate_mobile_numbe

  • 问题内容: 我正在尝试编写一个向指令添加验证属性的角度指令,但是它似乎没有用。这是我的演示。您将注意到,如果删除第二个输入框中的文本,则“有效”保持为true,但是如果删除第一个输入框中的文本,则为false。 http://plnkr.co/edit/Rr81dGOd2Zvio1cLYW8D?p=preview 这是我的指令: 我猜我只是缺少一些简单的东西。 问题答案: 在表单的编译阶段将读取所