formErrors = {
    'email': '',
    'displayName': '',
    // ...
  };
  validatorMessages = {
    //...
    'password': {
      'required': '必填欄位',
      'pattern': '至少須包含一字母一數字',
      'minlength': '長度至少為6',
      'maxlength': '長度最多為15'
    },
    'confirmPassword': {
      'required': '必填欄位',
    },
    'matchPassword': '密碼不相符'
  }
//...
private onValueChanged(data?: any) {
    if (!this.registerForm) { return; }
    const form = this.registerForm;
    for (const field in this.formErrors) {
      // clear previous error message (if any)
      this.formErrors[field] = '';
      switch (field) {
        case 'email':
        case 'displayName':
         //...
          break;
        case 'password':
        case 'confirmPassword':
          var group = form.get('passwordGroup');
          var control = group.get(field);
          if (control && control.dirty && !control.valid) {
            const messages = this.validatorMessages[field];
            for (const key in control.errors) {
              this.formErrors[field] += messages[key] + ' ';
            }
          }
          break;
        case 'matchPassword':
          var group = form.get('passwordGroup');
          if (group.get('password').dirty && group.get('confirmPassword').dirty
            && group.errors && group.errors.matchPassword) {
            this.formErrors[field] = this.validatorMessages[field];
          }
          break;
      }
    }
  }