Angular 2表单验证模式正则表达式错误

时间:2017-06-04 03:57:41

标签: regex forms angular validation design-patterns

我正在以角度创建一个表单,要求name字段只包含字母数字字符和空格。为此,我使用了pattern属性:

<input type="text" class="form-control" placeholder="Name" name="Name" [(ngModel)]="name" required pattern="/^[a-z\d-_\s]+$/i" #nameField="ngModel">

我在字符串不匹配时要显示以下错误消息:

<div *ngIf="nameField.errors">
   <div [hidden]="!nameField.errors.pattern">
       <p class="has-error">
          Only spaces, letters, and numbers are allowed.
       </p>
   </div>
</div>

但是,即使字符串与正则表达式匹配,我仍然可以看到错误消息。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我想这里的问题是正则表达式的语法没有正确形成:

 <form novalidate #f="ngForm" novalidate>
    <input type="text" 
    class="form-control" 
    placeholder="Name" name="Name" 
    [(ngModel)]="name" 
    required pattern="^[A-Z\\a-z\\d-_\\s]+$" 
    #nameField="ngModel" >
    <div>
      <div *ngIf="nameField.errors?.pattern">
        <p class="has-error">
          Only spaces, letters, and numbers are allowed.
        </p>
        hame: {{nameField.errors | json}}
     </div>
    </div>
  </form>

查看此plunkr

答案 1 :(得分:2)

您可以使用

pattern="^[\w\s-]+$"

[A-Za-z\d_]与JavaScript本机正则表达式中的\w匹配相同的字符。因此整个模式匹配一​​个或多个ASCII字母,数字,下划线,连字符或空格。

请注意,默认情况下,angular会锚定模式,但最好将锚点^$显式保留在模式中,以使其与任何其他框架兼容。