Hi Guys Welcome to Proto Coders Point, In this Android Tutorial we will learn how to implement password validation regex requirements in android app.
In other words Password Validation To check a password character must be minimum 8 character length which include alphebet, numeric digits and any special character symbol.
Password Validation requirements
- Atleast 8 character in length.
- Minimum One Uppercase.
- Minimum One Number.
- and should contain 1 Special Symbol.
Password Validation regex in android
Video Tutorial
Follow the below Steps and Code to integrate this validation textfield in android.
Step 1 : Create a new android project
offcourse you need to create a new Android Project or Open any existing project in android studio.
File > New > New Project > Empty Activity
Give a name to android project as “Password Validation android” or anything else as per your choice.
hit next > finish.
Step 2 : Add Material Design Dependencies
Open build.gradle(app level) and add the below android design dependencies.
implementation 'com.android.support:design:29.0.0'
We are making use of android design library dependencies so that we can use material.textfield.TextInputLayout and androidx.cardview.widget.CardView in our android UI design.
Step 3 : Creating a Registration page UI
Open activity_main.xml file and copy page the below xml UI code.

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="35sp"
android:textStyle="bold"
android:text="Register"
android:textColor="@android:color/black"
android:gravity="center"
android:layout_marginBottom="30dp"
/>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="60dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<EditText
android:id="@+id/etFullname"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Enter Full Name"
android:inputType="text"
android:textColor="@android:color/black"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="60dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<EditText
android:id="@+id/etEmail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Enter Email"
android:inputType="text"
android:textColor="@android:color/black"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="60dp"
app:passwordToggleEnabled="true"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Enter Password"
android:inputType="textPassword"
android:textColor="@android:color/black"
/>
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Password must be "
android:layout_marginTop="10dp"
android:textColor="@android:color/black"
android:textSize="18sp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:id="@+id/card1"
android:layout_width="20dp"
android:layout_height="20dp"
app:cardBackgroundColor="#dcdcdc"
app:cardCornerRadius="25dp"
android:layout_gravity="center">
<ImageView
android:layout_gravity="center"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/check_24"
/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black"
android:text="Atleast 8 character"
android:gravity="center|start"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:id="@+id/card2"
android:layout_width="20dp"
android:layout_height="20dp"
app:cardBackgroundColor="#dcdcdc"
app:cardCornerRadius="25dp"
android:layout_gravity="center">
<ImageView
android:layout_gravity="center"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/check_24"
/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black"
android:text="mininum one number"
android:gravity="center|start"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:id="@+id/card3"
android:layout_width="20dp"
android:layout_height="20dp"
app:cardBackgroundColor="#dcdcdc"
app:cardCornerRadius="25dp"
android:layout_gravity="center">
<ImageView
android:layout_gravity="center"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/check_24"
/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black"
android:text="minimum one uppercase"
android:gravity="center|start"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="10dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:id="@+id/card4"
android:layout_width="20dp"
android:layout_height="20dp"
app:cardBackgroundColor="#dcdcdc"
app:cardCornerRadius="25dp"
android:layout_gravity="center">
<ImageView
android:layout_gravity="center"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/check_24"
/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black"
android:text="minimum one special symbol"
android:gravity="center|start"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="10dp" />
</LinearLayout>
<androidx.cardview.widget.CardView
android:id="@+id/cardsignup"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="20sp"
app:cardBackgroundColor="#dcdcdc">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20sp"
android:textStyle="bold"
android:text="Sign Up"
android:textColor="@android:color/black"
android:gravity="center"/>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
As you can see in above Ui Screenshot we have 3 EditText, 4 Cardview with a tick Icon and a Button.
Step 4 : Java Coding to Handle password Validation
In Below Java code we have 2 method one to check passwordValidation() and other to keep track of InputChanged() in TextField.
MainActivity.java
package com.example.passwordcharactervalidation;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
public class MainActivity extends AppCompatActivity {
EditText etfullname,etEmail,etPassword;
CardView card1,card2,card3,card4,cardButtonSignUp;
private boolean is8char=false, hasUpper=false, hasnum=false, hasSpecialSymbol =false, isSignupClickable = false;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etfullname=(EditText) findViewById(R.id.etFullname);
etEmail = (EditText)findViewById(R.id.etEmail);
etPassword = (EditText)findViewById(R.id.etPassword);
card1 = (CardView)findViewById(R.id.card1);
card2 = (CardView)findViewById(R.id.card2);
card3 = (CardView)findViewById(R.id.card3);
card4 = (CardView)findViewById(R.id.card4);
cardButtonSignUp = (CardView)findViewById(R.id.cardsignup);
cardButtonSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
inputChanged();
}
@SuppressLint("ResourceType")
private void passwordValidate(){
String name = etfullname.getText().toString();
String email = etEmail.getText().toString();
String password = etPassword.getText().toString();
if(name.isEmpty())
{
etfullname.setError("Please Enter Full name ");
}
if(email.isEmpty())
{
etEmail.setError("Please Enter Email ");
}
// 8 character
if(password.length()>= 8)
{
is8char = true;
card1.setCardBackgroundColor(Color.parseColor(getString(R.color.colorAccent)));
}else{
is8char = false;
card1.setCardBackgroundColor(Color.parseColor(getString(R.color.colorGrey)));
}
//number
if(password.matches("(.*[0-9].*)"))
{
hasnum = true;
card2.setCardBackgroundColor(Color.parseColor(getString(R.color.colorAccent)));
}else{
hasUpper = false;
card2.setCardBackgroundColor(Color.parseColor(getString(R.color.colorGrey)));
}
//upper case
if(password.matches("(.*[A-Z].*)"))
{
hasUpper = true;
card3.setCardBackgroundColor(Color.parseColor(getString(R.color.colorAccent)));
}else{
hasUpper = false;
card3.setCardBackgroundColor(Color.parseColor(getString(R.color.colorGrey)));
}
//symbol
if(password.matches("^(?=.*[_.()$&@]).*$")){
hasSpecialSymbol = true;
card4.setCardBackgroundColor(Color.parseColor(getString(R.color.colorAccent)));
}else{
hasSpecialSymbol = false;
card4.setCardBackgroundColor(Color.parseColor(getString(R.color.colorGrey)));
}
//
}
private void inputChanged(){
etPassword.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@SuppressLint("ResourceType")
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
passwordValidate();
if(is8char && hasnum && hasSpecialSymbol && hasUpper)
{
cardButtonSignUp.setCardBackgroundColor(Color.parseColor(getString(R.color.colorPrimary)));
}
}
@Override
public void afterTextChanged(Editable s) {
}
//
});
//
}
}
Final Output






