2013-09-20 5 views
2

Как сделать проверку подлинности электронной почты? Я использовал следующий код для проверки валидации для электронной почты.Android - Проверка подлинности электронной почты

final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A- Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 
Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
Matcher matcher = pattern.matcher(string); 

Приведенный выше код работает отлично, но если я ввожу строку как "[email protected]" также, ответ я получаю, как true.

Мне нужно проверить это. Как я могу подтвердить это ?. Пожалуйста, помогите мне.

+0

Это c омплекс. Взгляните на http://www.regular-expressions.info/email.html – Kuffs

+0

Просто используйте 'android.util.Patterns.EMAIL_ADDRESS.matcher(). Matches()' check here http://stackoverflow.com/a/18909961/2398886 –

ответ

0

Используйте следующий класс:

public class RequiredFieldValidator implements Validator { 

    /** The objects. */ 
    List<EditText> objects; 

    /** The Constant EMAIL_ADDRESS_PATTERN. */ 
    private final static 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}" + ")+"); 

    /** 
    * Check email. 
    * 
    * @param email the email 
    * @return true, if successful 
    */ 
    public static boolean checkEmail(String email) { 
     return EMAIL_ADDRESS_PATTERN.matcher(email).matches(); 
    } 

    /** 
    * Instantiates a new required field validator. 
    * 
    * @param objects the objects 
    */ 
    public RequiredFieldValidator(List<EditText> objects) { 
     this.objects = objects; 
    } 

    /* (non-Javadoc) 
    * @see com.gangaz.mobi.supermarket.helper.Validator#setFailureMessage(java.lang.String) 
    */ 
    @Override 
    public void setFailureMessage(String message) { 
     // TODO Auto-generated method stub 

    } 

    /* (non-Javadoc) 
    * @see com.gangaz.mobi.supermarket.helper.Validator#setType(int) 
    */ 
    @Override 
    public void setType(int type) { 
     // TODO Auto-generated method stub 

    } 

    /* (non-Javadoc) 
    * @see com.gangaz.mobi.supermarket.helper.Validator#validate() 
    */ 
    @Override 
    public boolean validate() { 
     boolean valid = false; 
     for (EditText obj : objects) { 

      if (obj.getText().toString().trim().length() == 0) { 
       valid = false; 
       break; 
      } 

     } 
     return valid; 
    } 
} 

Тогда в вашей деятельности это сделать:

if (email.length() != 0 && 
    RequiredFieldValidator.checkEmail(email.trim()) != true) { 

       //show toast for invalid email 

       } 
0

Initialize рисунок ниже

public 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 email1) { 
     return EMAIL_ADDRESS_PATTERN.matcher(email1).matches(); 
    } 

И вызовите эту функцию с помощью электронной почты edittext String. Эта функция записи ИСТИНА или ЛОЖЬ

+0

Спасибо за информацию. Не проверяя для ввода как «[email protected]» – Gowri

+0

здесь вы используете 2 .com, тогда это неправильно, поэтому моя функция записывает false как результат .... ... и я думаю, что это написать .. –

0

Использование:

public boolean validateEmail(String strEmail) { 
      Matcher matcher; 
      String EMAIL_PATTERN = "[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}" + ")+"; 
      Pattern pattern = Pattern.compile(EMAIL_PATTERN); 
      matcher = pattern.matcher(strEmail); 
      return matcher.matches(); 

Если она возвращает верно, то электронная почта действует еще нет.

0

Ниже это самый простой и лучший способ, которым мы должны справиться с этим,

EditText e1 = (EditText)findViewById(R.id.e1); 
TextView t1 = (TextView)findViewById(R.id.t1); 

String email = e1.getText().toString().trim(); 
String emailPattern = "[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+"; 

// Below is the code that goes on your button click 
if (email.matches(emailPattern)) 
{ 
    // Do what you want to, Allow user to next screen 
} 
else 
{ 
    // Show error Message 
} 
+0

У вас может быть идея по ссылке, http: // www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression/ – Deepak

0

попробовать с:

String emailPattern = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 
+0

Вы должны добавить некоторый контекст относительно того, почему этот ответ работает. В противном случае, его очень короткий и склонный к удалению. –

+0

Это не сработает. Электронное письмо действительно, если мы можем отправить ему письмо. Даже 'space',' * ','% 'и многие другие символы действительны в адресе электронной почты – Anirudha

+0

i'I do not добавьте контекст, потому что в ее коде есть только email_pattern – Lele

0

попробовать это ...

public static boolean validateEmail(String email) 
{ 
    boolean isValid = false; 

    String expression = "^[\\w\\.-][email protected]([\\w\\-]+\\.)+[A-Z]{2,4}$"; 
    CharSequence inputStr = email; 

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(inputStr); 
    if(matcher.matches()) 
    { 
     isValid = true; 
    } 

    return isValid; 
} 
+0

. Это было распространено на нескольких сайтах, но это плохо, потому что он НЕ ДОПУСКАЕТ ДВУХ ДОЛГО, ЧЕМ 4 ХАРАКТЕРА! – user3175580

16

Используйте этот блок кода Передайте электронное письмо этой функции, оно вернет логическое значение true или false

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


    if (!validEmail(email)) { 
    Toast.makeText(YourActivity.this,"Enter valid e-mail!",Toast.LENGTH_LONG).show(); 

} 
0

попробовать это

private boolean validEmail(String email) 
    { 
    // TODO Auto-generated method stub 
    String emailPattern = "[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+"; 
    String emailPatternnew = "[a-zA-Z0-9._-][email protected][a-z]+\\.+[a-z]+\\.+[a-z]+"; 
    String domain = email.substring(email.indexOf('@'), email.length()); 
    String last = domain.substring(domain.indexOf('.'),domain.length()); 
    if (email.matches(emailPattern) && (last.length() ==3 || last.length() == 4)) // check @domain.nl or @domain.com or @domain.org 
    {  
     return true; 
    } 
    else if(email.matches(emailPatternnew) && last.length() == 6 && email.charAt(email.length()-3)== '.') //check for @domain.co.in or @domain.co.uk 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
+0

Это не сработает. Письмо является действительным, если мы можем отправить ему письмо. Даже «пробел», «*», «%» и многие другие символы действительны в идентификаторе электронной почты – Anirudha

2

U не нужно определить любой рег потому что андроид сам дает функциональность для проверки электронной почты является действительным не по TextUtils.isEmpty(edtEmail.getText().toString().trim())

Второй способ:

public static boolean isEmailValid(String email) { 

     String regExpn = "^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@" 
       + "((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" 
       + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\." 
       + "([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?" 
       + "[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" 
       + "([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$"; 
     CharSequence inputStr = email; 
     Pattern pattern = Pattern.compile(regExpn, Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(inputStr); 
     if (matcher.matches()) 
      return true; 
     else 
      return false; 
    } 

надеюсь, что это поможет u

Смежные вопросы