Java에 적합한 이메일 주소 유효성 검사 라이브러리는 무엇입니까? Commons Validator에 대한 대안이 있습니까?
답변
Apache Commons는 일반적으로 견고한 프로젝트로 알려져 있습니다. 그러나 실제 이메일인지 확인하고 소유자가 사이트에서 사용하기를 원하는 경우에도 확인 이메일을 주소로 보내야합니다.
편집 : 도메인에 너무 제한적인 버그 가있어 새 TLD에서 유효한 전자 메일을받지 못합니다.
이 버그는 commons-validator 버전 1.4.1의 03 / Jan / 15 02:48에서 해결되었습니다.
답변
공식 Java 이메일 패키지를 사용하는 것이 가장 쉽습니다.
public static boolean isValidEmailAddress(String email) {
boolean result = true;
try {
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
} catch (AddressException ex) {
result = false;
}
return result;
}
답변
다른 답변에서 언급했듯이 Apache Commons 유효성 검사기를 사용할 수 있습니다.
pom.xml :
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.1</version>
</dependency>
build.gradle :
compile 'commons-validator:commons-validator:1.4.1'
수입품 :
import org.apache.commons.validator.routines.EmailValidator;
코드:
String email = "myName@example.com";
boolean valid = EmailValidator.getInstance().isValid(email);
로컬 주소를 허용
boolean allowLocal = true;
boolean valid = EmailValidator.getInstance(allowLocal).isValid(email);
답변
늦은 답변이지만 간단하고 가치 있다고 생각합니다.
public boolean isValidEmailAddress(String email) {
String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
java.util.regex.Pattern p = java.util.regex.Pattern.compile(ePattern);
java.util.regex.Matcher m = p.matcher(email);
return m.matches();
}
테스트 사례 :
프로덕션 목적으로 도메인 이름 유효성 검사는 네트워크 방식으로 수행해야합니다.
답변
클라이언트로부터받은 양식 유효성 검사를 수행하거나 빈 유효성 검사를 수행하려는 경우 단순하게 유지하십시오. 웹 서비스에 등록하려고 할 때 엄격한 사람을 확인하고 일부 사람들을 거부하는 것보다 느슨한 이메일 확인을 수행하는 것이 좋습니다. 이메일의 사용자 이름 부분에 거의 모든 것이 허용되고 매월 말 그대로 추가되는 많은 새 도메인 (예 : .company, .entreprise, .estate)이 제한적이지 않은 것이 더 안전합니다.
Pattern pattern = Pattern.compile("^.+@.+\\..+$");
Matcher matcher = pattern.matcher(email);
답변
질문에 늦었지만 여기 :이 주소에서 수업을 유지합니다 : http://lacinato.com/cm/software/emailrelated/emailaddress
Les Hazlewood의 클래스를 기반으로하지만 많은 개선 사항이 있으며 몇 가지 버그가 수정되었습니다. 아파치 라이선스.
Java에서 가장 유능한 전자 메일 파서라고 생각하지만 아직 어떤 언어로도 유능한 전자 메일 파서가 하나도 보이지 않습니다. 그것은 렉서 스타일 파서가 아니지만 복잡한 자바 정규 표현식을 사용하므로 가능한 효율적이지 않지만 회사는 100 억 개 이상의 실제 주소를 파싱했습니다. 고성능으로 확실히 사용할 수 있습니다. 상태. 아마도 일년에 한 번은 정규 표현식 스택 오버플로를 유발하는 주소에 부딪 칠 수 있지만 (수많은 따옴표와 괄호 등으로 수백 또는 수천 자 길이의 스팸 주소입니다).
RFC 2822 및 관련 사양은 전자 메일 주소와 관련하여 실제로 매우 허용되므로 이와 같은 클래스는 대부분의 용도에 과도합니다. 예를 들어, 다음은 사양, 공백 및 모두에 따른 합법적 인 주소입니다.
"<bob \" (here) " < (hi there) "bob(the man)smith" (hi) @ (there) example.com (hello) > (again)
메일 서버는이를 허용하지 않지만이 클래스는이를 구문 분석하고 사용 가능한 양식으로 다시 작성할 수 있습니다.
기존 Java 이메일 파서 옵션이 내구성이 부족하다는 것을 발견했습니다 (즉, 모든 유효한 주소를 구문 분석 할 수 없음).이 클래스를 작성했습니다.
코드는 잘 문서화되어 있으며 특정 전자 메일 양식을 허용하거나 허용하지 않는 변경하기 쉬운 옵션이 많이 있습니다. 또한 주소의 특정 부분 (왼쪽, 오른쪽, 개인 이름, 주석 등)에 액세스하고 사서함 목록 헤더를 구문 분석 / 확인하고 반환 경로를 구문 분석 / 확인하는 많은 방법을 제공합니다. (헤더 중에서 고유함) 등.
작성된 코드는 javamail 의존성을 갖지만, 사소한 기능을 원하지 않는 경우 쉽게 제거 할 수 있습니다.