25

I have one edittext and I would to to write email validation in my Editttext this is a xml code

<EditText
        android:id="@+id/mail"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignLeft="@+id/phone"
        android:layout_below="@+id/phone"
        android:layout_marginRight="33dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/edit_background"
        android:ems="10"
        android:hint="E-Mail"
        android:inputType="textEmailAddress"
        android:paddingLeft="20dp"
        android:textColor="#7e7e7e"
        android:textColorHint="#7e7e7e" >
</EditText>

and this is a java code

emailInput = mail.getText().toString().trim();

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

if (emailInput.matches(emailPattern)) {
    Toast.makeText(getActivity(), "valid email address", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(getActivity(), "Invalid email address", Toast.LENGTH_SHORT).show();
    mail.setBackgroundResource(R.drawable.edit_red_line);
}

I can't validation. The toast message is always "Invalid email address". What am I doing wrong?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
BekaKK
  • 2,173
  • 6
  • 42
  • 80

14 Answers14

98

Why not use:

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

As suggested here.

Community
  • 1
  • 1
Daniel Zolnai
  • 16,487
  • 7
  • 59
  • 71
3

I am posting very simple and easy answer of email validation without using any string pattern.

1.Set on click listener on button....

 button_resetPassword.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            CharSequence temp_emilID=username.getText().toString();//here username is the your edittext object...
            if(!isValidEmail(temp_emilID))
            {
                username.requestFocus();
                username.setError("Enter Correct Mail_ID ..!!");
                     or
                Toast.makeText(getApplicationContext(), "Enter Correct Mail_ID", Toast.LENGTH_SHORT).show();

            }
            else
           {
              correctMail.. 
             //Your action...

           }

         });

2.call the isValidEmail() i.e..

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

I hope it will helpful for you...

sachin pangare
  • 1,527
  • 15
  • 11
1

Android Email Validation Simplest way

   String validemail= "[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}" +

                        ")+";

               String emal=email.getText().toString();

                Matcher matcherObj = Pattern.compile(validemail).matcher(emal);



                        if (matcherObj.matches()) {

                               Toast.makeText(getApplicationContext(), "enter 

all details", Toast.LENGTH_SHORT).show();

                        }

                        else 
{
                            Toast.makeText(getApplicationContext(),"please enter 

valid email",Toast.LENGTH_SHORT).show();

                        }
Raseem Ayatt
  • 970
  • 10
  • 14
1

Try following code:

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

This works fine.

coderz
  • 4,847
  • 11
  • 47
  • 70
Shamir Kp
  • 488
  • 5
  • 9
1
String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";


if(emailId.getText().toString().isEmpty()) {
 Toast.makeText(getApplicationContext(),"enter email address",Toast.LENGTH_SHORT).show();
else {
if (emailId.getText().toString().trim().matches(emailPattern)) {
  Toast.makeText(getApplicationContext(),"valid email address",Toast.LENGTH_SHORT).show();
 } else {
  Toast.makeText(getApplicationContext(),"Invalid email address", Toast.LENGTH_SHORT).show();
  }
}
rhaldar
  • 1,075
  • 10
  • 6
0
android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches()
Zoe
  • 27,060
  • 21
  • 118
  • 148
ivap arht
  • 19
  • 3
0

here is a whole code for login validations......

public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
private static final int REQUEST_SIGNUP = 0;

@Bind(R.id.input_email) EditText _emailText;
@Bind(R.id.input_password) EditText _passwordText;
@Bind(R.id.btn_login) Button _loginButton;
@Bind(R.id.link_signup) TextView _signupLink;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);

    _loginButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            login();
        }
    });

    _signupLink.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Start the Signup activity
            Intent intent = new Intent(getApplicationContext(), SignupActivity.class);
            startActivityForResult(intent, REQUEST_SIGNUP);
            finish();
            overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
        }
    });
}

public void login() {
    Log.d(TAG, "Login");

    if (!validate()) {
        onLoginFailed();
        return;
    }

    _loginButton.setEnabled(false);

    final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
            R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Authenticating...");
    progressDialog.show();

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    // TODO: Implement your own authentication logic here.

    new android.os.Handler().postDelayed(
            new Runnable() {
                public void run() {
                    // On complete call either onLoginSuccess or onLoginFailed
                    onLoginSuccess();
                    // onLoginFailed();
                    progressDialog.dismiss();
                }
            }, 3000);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SIGNUP) {
        if (resultCode == RESULT_OK) {

            // TODO: Implement successful signup logic here
            // By default we just finish the Activity and log them in automatically
            this.finish();
        }
    }
}

@Override
public void onBackPressed() {
    // Disable going back to the MainActivity
    moveTaskToBack(true);
}

public void onLoginSuccess() {
    _loginButton.setEnabled(true);
    finish();
}

public void onLoginFailed() {
    Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();

    _loginButton.setEnabled(true);
}

public boolean validate() {
    boolean valid = true;

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        _emailText.setError("enter a valid email address");
        valid = false;
    } else {
        _emailText.setError(null);
    }

    if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
        _passwordText.setError("between 4 and 10 alphanumeric characters");
        valid = false;
    } else {
        _passwordText.setError(null);
    }

    return valid;
}

}

Tabish khan
  • 772
  • 8
  • 11
0
private void isValidEmail(String email_id) {

        if (email_id == null){
            checkTextView.setVisibility(View.VISIBLE);
            checkTextView.setText(LocaleController.getString("EnterValidEmail", R.string.EnterValidEmail));
            return;
        }
        if (android.util.Patterns.EMAIL_ADDRESS.matcher(email_id).matches()) {
            checkTextView.setVisibility(View.GONE);
        } else {
            checkTextView.setVisibility(View.VISIBLE);
            checkTextView.setText(LocaleController.getString("EnterValidEmail", R.string.EnterValidEmail));
        }

Take a textView ex.checkTextView and validate when the email is valid then the textview is gone otherwise it show the message

Zoe
  • 27,060
  • 21
  • 118
  • 148
rajeev omar
  • 166
  • 1
  • 7
0

Use this function for validating email id:

 private boolean validateEmaillId(String emailId){

    return Pattern.compile("^(([\\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})$").matcher(emailId).matches();
}
Vishal Vaishnav
  • 3,346
  • 3
  • 26
  • 57
0

I had a query in email pattern for more than one Email ID validation and for only one Email ID.I solved it by using :

public static final String patter_emails="^(\\s*,?\\s*[0-9a-za-z]([-.\\w]*[0-9a-za-z])*@([0-9a-za-z][-\\w]*[0-9a-za-z]\\.)+[a-za-z]{2,9})+\\s*$";
public static final String patter_email="^(\\s*[0-9a-za-z]([-.\\w]*[0-9a-za-z])*@([0-9a-za-z][-\\w]*[0-9a-za-z]\\.)+[a-za-z]{2,9})+\\s*$";

These above is used for pattern in Java and Android both.

check this by using:

pattern test: rubular.com

ChrisF
  • 134,786
  • 31
  • 255
  • 325
ankit
  • 2,591
  • 2
  • 29
  • 54
0

Try this code

String emailPattern = "(?:[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])+)\\])";
        if (!tvEmail.matches(Constants.emailPattern)){
            tvEmail.setError("Invalid Email ");
        }
        else{
            //your code
        }
Anjana
  • 37
  • 9
0

String emailPattern = "(?:[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])+)\\])";
if (!"anan.pp@gmail.co".matches(Constants.emailPattern)){
    //tvEmail.setError("Invalid Email ");
} else {
    // your code
}
Kelvin Schoofs
  • 8,323
  • 1
  • 12
  • 31
Anandroid
  • 1
  • 2
-1

Try below code:

Just call below method like,

if(emailValidator(mail.getText().toString())){
Toast.makeText(getActivity(), "valid email address",
                    Toast.LENGTH_SHORT).show();

}else{
Toast.makeText(getActivity(), "invalid email address",
                    Toast.LENGTH_SHORT).show();

}

    public static boolean emailValidator(final String mailAddress) {

            Pattern pattern;
            Matcher matcher;

            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.compile(EMAIL_PATTERN);
            matcher = pattern.matcher(mailAddress);
            return matcher.matches();

        }
Pratik Dasa
  • 7,439
  • 4
  • 30
  • 44
-1

Assign a String variable to store the value of this EditText:

emailInput = mail.getText().toString().trim();

Use setError in your EditText:

if(!isValidEmail(emailInput)){
   mail.setError("Invalid"); /*"Invalid Text" or something like getString(R.string.Invalid)*/
   mail.requestFocus();
}

Create a method to check the email:

private boolean isValidEmail(String emailInput) {
    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(emailInput);
    return matcher.matches();
}
King of Masses
  • 18,405
  • 4
  • 60
  • 77