【问题标题】:Regex pattern validation Angularjs2正则表达式模式验证Angularjs2
【发布时间】:2017-03-03 18:01:13
【问题描述】:

我正在开发一个 Angular2 应用程序。我正在尝试使用正则表达式模式登录时进行验证。

login.component.ts

import { Component, OnInit } from '@angular/core';
import {AuthenticationService, User} from '../authentication-service.service';
import {TokenService} from '../token.service';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css'],
  providers: [AuthenticationService,TokenService]

})

export class LoginComponent {

public user = new User('','','');
public errorMsg = '';

constructor(private _service:AuthenticationService) {
    var ssnRegex='^(\d{6}|\d{8})[-|(\s)]{0,1}\d{4}$';
    this.logout();
}

  login() {
      if(!this._service.login(this.user)){
          this.errorMsg = 'Failed to login';
      }
  }

  logout(){
      localStorage.removeItem("token");
      localStorage.removeItem("user");
      localStorage.removeItem("paydid");
  }
}

login.component.html

<form id="login-form" action="" method="post" role="form" style="display: block;" #roomForm='ngForm'>
        <div class="form-group">
                        <input type="text" required maxlength="12" minlength="12" [pattern]="ssnRegex" ngModel name="capacity" #capacity='ngModel' [(ngModel)]="user.ssn" name="ssn" id="ssn" tabindex="1" class="form-control input-box" placeholder=" Personnummer (ååååmmddnnnn)"
                            value="">
                    </div>
                    <div class="form-group">
                        <div class="row">
                            <div class="col-sm-4 col-sm-offset-4">
                                <span style="color:red; float:left; width: 100px;">{{errorMsg}}</span>
                                <button (click)="login()" class="btn waves-effect waves-light" type="submit" name="action">Login</button>
                            </div>
                        </div>
                    </div>l
                </form>

这是我到目前为止所做的。但这并没有在登录时进行预期的验证。同时,如果输入的字符串不符合模式,我需要显示错误消息。我是 Angualrjs 的新手。帮助表示赞赏。谢谢!

【问题讨论】:

  • “未按预期执行”是什么意思?在不应该的时候通过验证?
  • @Sefa Ümit Oray;感谢您的回复。这意味着当有人尝试登录并且如果它失败了,那是因为这个人没有经过身份验证,我没有在这里显示代码,因为它在这里是不敬的。上面的代码没有检查输入的字符串是否与我提到的正则表达式模式内联。

标签: regex validation angular


【解决方案1】:

你需要改成:

this.ssnRegex='^(\d{6}|\d{8})[-|(\s)]{0,1}\d{4}$';

例子:

@Component({
  selector: 'my-app',
  template: `
    <form #roomForm="ngForm">
       <input type="text" [pattern]="ssnRegex" [(ngModel)]="user.ssn" name="ssn" required #ssn="ngModel">
      {{ssn.valid}}
    </form>
  `,
})
export class App {
  constructor() {
    this.user = {ssn: ""};
    this.ssnRegex = "[A-Za-z]{3}" // Only 3 letters allowed for example
  }
}

@NgModule({
  imports: [ BrowserModule, FormsModule],
  declarations: [ App ],
  providers: [SessionService],
  bootstrap: [ App ]
})
export class AppModule {}

Plunker

【讨论】:

  • 非常感谢您帮助我。我尝试了您的代码,并且对于我输入的每个文本 login() 方法都会执行。由于user.ssn 为空,因此涉及错误部分。这意味着它仍然没有进行预期的验证。在您的代码中,我看到它缺少user.ssn 的数据绑定。在您的代码中,它是ssn。我有点困惑。 SessionService 这里有必要吗?请帮忙。我还在挣扎。
  • 现在登录时身份验证工作。但它不检查这种模式。我必须导入一些东西才能让它工作吗?
  • 你需要检查模式,因为这段代码有效,也许你的模式有错误
  • 抱歉回复晚了。是的,你是对的。模式不正确。现在一切正常。谢谢你帮助我..
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 2019-08-03
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多