1

사용자가 채운 이메일 주소를 확인하기 위해 맞춤 검사기를 만들었습니다. 어쨌든 이메일 필드는 필요하지 않지만 유효성 검사기를 추가하면 required도 포함됩니다.Angular2 : 유효성 검사기를 추가하고 필요한 것을 제외하는 방법

은 여기 내 구성 요소 클래스의 constructor에서 내 양식이다

this.myForm = fb.group({ 
     'name': [''], 
     'surname': [''], 
     'username': ['', Validators.required], 
     'email': ['', validateEmail] 
    }); 

이메일 필드가 필요하지 않지만 사용자가 그것을 채울하지 않는 경우, 형태는 확인되지 않습니다. 동시에 사용자가 그것을 채우는 경우, 전자 메일 검증이 적용되기를 원합니다.

여기 내 이메일 검사기입니다 :

export function validateEmail(c: FormControl) { 
    var EMAIL_REGEXP = /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})*$/i; 

    return EMAIL_REGEXP.test(c.value) ? null : { 
     validateEmail: { 
      valid: false 
     } 
    }; 
} 

내가 빈 문자열을 받아 내 사용자 지정 유효성 검사기를 편집 할 수 있지만, 나는이 내 문제를 해결하는 올바른 방법이 아니다라고 생각합니다.

더 좋은 아이디어가 있습니까?

+0

* 빈 문자열을 허용하도록 사용자 정의 유효성 검사기를 편집 할 수는 있지만 이것이 내 문제를 해결하는 올바른 방법이 아닌 것 같아요. * : 이것은 내게 완벽하고 자연스럽고 올바른 것으로 보입니다. –

+0

음 ... 전자 메일 주소에 대한 사용자 지정 유효성 검사기를 만드는 경우 빈 문자열의 유효성을 검사 할 수 없으므로 다른 구성 요소에서 다시 사용할 수 있습니다. 동의하지 않니? – smartmouse

+1

왜 다시 사용할 수 없습니까? 전자 메일 주소를 사용하려면 전자 메일 유효성 검사기를 사용하십시오. 필수 전자 메일 주소를 원하고 필수 및 전자 메일 검사기를 사용하십시오. 각 유효성 검사기는 고유 한 책임과 고유 한 오류를 가지고 있으며 원하는 동작을 달성하기 위해 구성합니다. –

답변

0

매개 변수를 사용하는 사용자 정의 유효성 검사기를 만듭니다. 따라서 유효한 전자 메일을 확인하고 필요한 유효한 전자 메일을 확인하는 데에도 유용 할 수 있습니다. true 또는 false으로 전화를 걸면 여전히 재사용이 가능하며 필요하지 않을 수도 있습니다. 다음과 같이

import {FormControl} from "@angular/forms"; 

export const validateEmail = (canBeEmpty:boolean) => { 
    return (control:FormControl) => { 
     var EMAIL_REGEXP = /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})*$/i; 

     if (canBeEmpty) { 
      EMAIL_REGEXP = /^$|^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})*$/i; 
     } 

     return EMAIL_REGEXP.test(control.value) ? null : { 
      validateEmail: { 
       valid: false 
      } 
     }; 
    }; 
} 
0

제어 값에 대한 빈 문자열을 허용 :

static emailValidator(control: any) { 
    // RFC 2822 compliant regex 
    var EMAIL_REGXP = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; 

    if (control.value === '' || control.value.match(EMAIL_REGXP)) { 
    return null; 
    } else { 
    return { 'invalidEmailAddress': true }; 
    } 
}; 

내가이이 같은 부작용으로 볼 수 있다고 생각하지 않습니다 여기에

코드입니다 함수의 목적은 전자 메일 형식을 준수해야하는 잘못된 문자열을 찾는 것입니다.

관련 문제