我有這個表格:
this.form = new FormGroup({
someField: new FormControl(''),
someOtherField: new FormControl(''),
cpf: new FormControl('', [ CustomFormValidators.isValidCPF ]),
});
而這個CustomValidator:
static isValidCPF(control: AbstractControl): ValidationErrors | null {
const cpf: string = String(control.value);
const validCPF = CustomFormValidators.sanitizeCPF(cpf);
if ( CustomFormValidators.validateCPF( validCPF ) ) return null; //Success
return { isValidCPF: true }; //Error
}
我的問題是:
在我的表單中,不需要 CPF 欄位,因此用戶可以將其留空。但是我的 CustomValidator 觸發了錯誤,因此我的表單無效,除非否則不會提交。
我嘗試將這個條件放在方法上但沒有成功:
if(!control.value){
if(control.errors && !control.errors.hasOwnProperty('required')){
return null;
}
}
附加資訊:
下面的代碼只是為了以防萬一。但它沒有損壞或錯誤。它 100% 完美運行。它可能在變數名稱上有拼寫錯誤,因為我不得不為這個問題進行更改。但下面的代碼不是問題
private static sanitizeCPF(cpf): string{
return cpf.replace(/[^\s\d\ ]*[\s]?[\s\\\^]?/g,'');
}
private static validateCPF(cpf: string, verifier?): boolean {
let sum = 0;
let rest;
const x = verifier ? 0 : 1;
for (let i = 1; i <= (9 x); i ){
sum = sum parseInt(cpf.substring(i-1, i)) * ((11 x) - i);
}
rest = (sum * 10) % 11;
if ((rest == 10) || (rest == 11)) { rest = 0; }
if (rest != parseInt(cpf.substring((9 x), (10 x))) ) { return false; }
if(!verifier) { return CustomFormValidators.validateCPF(cpf, true); }
return true;
}
uj5u.com熱心網友回復:
在 Angular 中,通常不驗證空輸入 - 因為這是所需驗證器的作業。
當輸入為空時,只需跳過驗證:
static isValidCPF(control: AbstractControl): ValidationErrors | null {
const cpf: string = String(control.value);
// -------------
if (!cpf) return null;
// -------------
const validCPF = CustomFormValidators.sanitizeCPF(cpf);
if ( CustomFormValidators.validateCPF( validCPF ) ) return null; //Success
return { isValidCPF: true }; //Error
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387490.html
