이메일 주소를 어떻게 확인해야합니까? 방법은 무엇입니까? org.apache.commons.validator.routines.EmailValidator 를 사용할

Android에서 이메일 주소 (예 : 사용자 입력 필드)를 확인하는 좋은 방법은 무엇입니까? org.apache.commons.validator.routines.EmailValidator 를 사용할 수없는 것 같습니다. Android에 이미 포함되어 있거나 RegExp를 사용해야하는 다른 라이브러리가 있습니까?



답변

정규식을 사용하지 마십시오.

다음은 RFC 2822 를 준수하는 대부분의 전자 우편 주소를 올바르게 확인하는 정규식입니다 (org.apache.commons.validator와 마찬가지로 “user@gmail.com.nospam”와 같은 경우에는 여전히 실패 함). 루틴 .EmailValidator)

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

제공된 주소로 확인 이메일을 보내기 위해 이메일을 검증하는 가장 쉬운 방법 일 수 있으며 반송 된 다음 유효하지 않습니다.

기본 검사를 수행하려는 경우 양식에 있는지 확인할 수 있습니다. *@*

비즈니스 로직 별 유효성 검사가있는 경우 정규식을 사용하여 수행 할 수 있습니다 (예 : gmail.com 계정 등).


답변

또 다른 옵션은 API 레벨 8로 시작 하는 기본 제공 패턴입니다 .

public final static boolean isValidEmail(CharSequence target) {
  if (TextUtils.isEmpty(target)) {
    return false;
  } else {
    return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
  }
}

볼 수있는 패턴 소스

또는

@AdamvandenHoven의 한 라인 솔루션 :

public final static boolean isValidEmail(CharSequence target) {
  return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

답변

다음 패턴은 K-9 메일에서 사용됩니다.

public static final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile(
          "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
          "\\@" +
          "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
          "(" +
          "\\." +
          "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
          ")+"
      );

기능을 사용할 수 있습니다

private boolean checkEmail(String email) {
        return EMAIL_ADDRESS_PATTERN.matcher(email).matches();
}

답변

API 8 (android 2.2) 이후 패턴은 android.util.Patterns.EMAIL_ADDRESS
http://developer.android.com/reference/android/util/Patterns.html입니다.

따라서이를 사용하여 yourEmailString의 유효성을 검사 할 수 있습니다.

private boolean isValidEmail(String email) {
    Pattern pattern = Patterns.EMAIL_ADDRESS;
    return pattern.matcher(email).matches();
}

이메일이 유효하면 true를 반환

UPD :이 패턴 소스 코드는 다음과 같습니다.

public static final Pattern EMAIL_ADDRESS
    = Pattern.compile(
        "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
        "\\@" +
        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
        "(" +
            "\\." +
            "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
        ")+"
    );

참조 : http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/util/Patterns.java

따라서 API <8과의 호환성을 위해 직접 빌드 할 수 있습니다.


답변

이제 간단한 이메일 패턴 매 처가 있습니다

 private static boolean isValidEmail(String email) {
        return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

답변

이메일 유효성 검사에 간단한 한 줄 코드 사용

public static boolean isValidEmail(CharSequence target) {
    return !TextUtils.isEmpty(target) && android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}

처럼 사용 …

if (!isValidEmail(yourEdittext.getText().toString()) {
    Toast.makeText(context, "your email is not valid", 2000).show();
}

답변

이것은 Android Studio 제안입니다.

public static boolean isEmailValid(String email) {
    return !(email == null || TextUtils.isEmpty(email)) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}