8 changed files with 11063 additions and 37 deletions
@ -0,0 +1,27 @@ |
|||||||
|
<div class="box"> |
||||||
|
<form nz-form [formGroup]="validateForm"> |
||||||
|
<nz-form-item> |
||||||
|
<nz-form-control nzErrorTip=""> |
||||||
|
<nz-input-group> |
||||||
|
<input name="oldpassword" nz-input type="password" formControlName="oldpassword" placeholder="请输入原密码" autocomplete="off" /> |
||||||
|
</nz-input-group> |
||||||
|
</nz-form-control> |
||||||
|
</nz-form-item> |
||||||
|
<nz-form-item> |
||||||
|
<nz-form-control> |
||||||
|
<nz-input-group> |
||||||
|
<input name="newpassword" nz-input type="password" formControlName="newpassword" placeholder="请输入新密码" |
||||||
|
autocomplete="off" /> |
||||||
|
</nz-input-group> |
||||||
|
</nz-form-control> |
||||||
|
</nz-form-item> |
||||||
|
<nz-form-item> |
||||||
|
<nz-form-control> |
||||||
|
<nz-input-group> |
||||||
|
<input name="affirmpassword" nz-input type="password" formControlName="affirmpassword" placeholder="确认新密码" |
||||||
|
autocomplete="new-password" /> |
||||||
|
</nz-input-group> |
||||||
|
</nz-form-control> |
||||||
|
</nz-form-item> |
||||||
|
</form> |
||||||
|
</div> |
@ -0,0 +1,46 @@ |
|||||||
|
|
||||||
|
import { Component, OnInit, Input } from '@angular/core'; |
||||||
|
import { NzModalRef } from 'ng-zorro-antd/modal'; |
||||||
|
import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; |
||||||
|
import { HttpClient } from '@angular/common/http'; |
||||||
|
import { NzSafeAny } from 'ng-zorro-antd/core/types'; |
||||||
|
@Component({ |
||||||
|
selector: 'app-change-password', |
||||||
|
templateUrl: './change-password.component.html', |
||||||
|
styleUrls: ['./change-password.component.scss'] |
||||||
|
}) |
||||||
|
export class ChangePasswordComponent implements OnInit { |
||||||
|
constructor(private modal: NzModalRef, private fb: FormBuilder, private http: HttpClient) { } |
||||||
|
validateForm!: FormGroup; |
||||||
|
ngOnInit(): void { |
||||||
|
const { password } = MyValidators; |
||||||
|
this.validateForm = this.fb.group({ |
||||||
|
oldpassword: [null, [Validators.required]], |
||||||
|
newpassword: [null, [Validators.required, password]], |
||||||
|
affirmpassword: [null, [Validators.required, password]] |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
export type MyErrorsOptions = { 'zh-cn': string; en: string } & Record<string, NzSafeAny>; |
||||||
|
export type MyValidationErrors = Record<string, MyErrorsOptions>; |
||||||
|
export class MyValidators extends Validators { |
||||||
|
static password(control: AbstractControl): MyValidationErrors | null { |
||||||
|
const value = control.value; |
||||||
|
|
||||||
|
if (isEmptyInputValue(value)) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
return isPassword(value) ? null : { mobile: { 'zh-cn': `长度 12 位以上,包含①大写字母、②小写字母、③数字、④特殊字符四种中的三种组合`, en: `Password phone number is not valid` } }; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
function isEmptyInputValue(value: NzSafeAny): boolean { |
||||||
|
return value == null || value.length === 0; |
||||||
|
} |
||||||
|
function isPassword(value: string): boolean { |
||||||
|
return typeof value === 'string' && /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{12,99}$/.test(value); |
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue