Skip to main content

Validate Email & Password with Regular Expression

 



In this video we will learn, how to validate an email address and password client side, by using regular expressions (regex).

This way we can check, if the inserted email address is formed like an email address, and if the password contains certain characters, like upper and lower case letters, digits and special characters.
For this we will use the Pattern class, with which we can compile a regex from a string and then use the matcher method to compare it with the input.

In build.gradle file add this dependency:-

implementation 'com.google.android.material:material:1.0.0'


In MainActivity.java class file add these lines of codes:-

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.Toast;

import com.google.android.material.textfield.TextInputLayout;

import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {
private static final Pattern PASSWORD_PATTERN =
Pattern.compile("^" +
//"(?=.*[0-9])" + //at least 1 digit
//"(?=.*[a-z])" + //at least 1 lower case letter
//"(?=.*[A-Z])" + //at least 1 upper case letter
"(?=.*[a-zA-Z])" + //any letter
"(?=.*[@#$%^&+=])" + //at least 1 special character
"(?=\\S+$)" + //no white spaces
".{4,}" + //at least 4 characters
"$");
private TextInputLayout textInputEmail;
private TextInputLayout textInputUsername;
private TextInputLayout textInputPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textInputEmail = findViewById(R.id.text_input_email);
textInputUsername = findViewById(R.id.text_input_username);
textInputPassword = findViewById(R.id.text_input_password);
}
private boolean validateEmail() {
String emailInput = textInputEmail.getEditText().getText().toString().trim();
if (emailInput.isEmpty()) {
textInputEmail.setError("Field can't be empty");
return false;
} else if (!Patterns.EMAIL_ADDRESS.matcher(emailInput).matches()) {
textInputEmail.setError("Please enter a valid email address");
return false;
} else {
textInputEmail.setError(null);
return true;
}
}
private boolean validateUsername() {
String usernameInput = textInputUsername.getEditText().getText().toString().trim();
if (usernameInput.isEmpty()) {
textInputUsername.setError("Field can't be empty");
return false;
} else if (usernameInput.length() > 15) {
textInputUsername.setError("Username too long");
return false;
} else {
textInputUsername.setError(null);
return true;
}
}
private boolean validatePassword() {
String passwordInput = textInputPassword.getEditText().getText().toString().trim();
if (passwordInput.isEmpty()) {
textInputPassword.setError("Field can't be empty");
return false;
} else if (!PASSWORD_PATTERN.matcher(passwordInput).matches()) {
textInputPassword.setError("Password too weak");
return false;
} else {
textInputPassword.setError(null);
return true;
}
}
public void confirmInput(View v) {
if (!validateEmail() | !validateUsername() | !validatePassword()) {
return;
}
String input = "Email: " + textInputEmail.getEditText().getText().toString();
input += "\n";
input += "Username: " + textInputUsername.getEditText().getText().toString();
input += "\n";
input += "Password: " + textInputPassword.getEditText().getText().toString();
Toast.makeText(this, input, Toast.LENGTH_SHORT).show();
}
}

In activity_main.xml file add these lines of codes:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_input_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:counterMaxLength="15"
app:errorEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/text_input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:errorEnabled="true"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="confirmInput"
android:text="Confirm"
tools:ignore="OnClick" />
</LinearLayout>

After adding these lines of codes run this application and see the required output.






Comments

Popular posts from this blog

Why Ethereum Smart Contracts Make It Hard to Get Payments

  The Unique Role of Smart Contracts in Ethereum One of Ethereum’s standout features is its ability to host diverse applications on its blockchain using smart contracts. However, these smart contracts, while powerful, sometimes complicate simple tasks. For instance, determining the amount of ETH deposited into a specific Ethereum address can be surprisingly complex. This is because you cannot understand the actions of a smart contract without executing it. Synchronizing Blockchain Internals and Externals Smart contracts operate exclusively within the blockchain's data, reading and writing information stored on-chain. This limitation does not prevent the creation of valuable applications, such as multi-signature wallets or tokens like ERC-20 and ERC-721, which rely solely on on-chain data. However, most practical applications also require interaction with off-chain systems. Take cryptocurrency exchanges, for example. Exchanges facilitate converting ETH into fiat currency or vice ver...

Room + ViewModel + LiveData + RecyclerView (MVVM)

Part 1 - Introduction Part 2 – Entity Part 3 – DAO & RoomDatabase Part 4 – Repository Part 5 – ViewModel Part 6 – RecyclerView + Adapter Part 7 – Add Note Activity Part 8 – Swipe to Delete Part 9 – OnItemClickListener & Update Functionality Part 10 – ListAdapter                     Part 1 - Introduction In this tutorial we will build a note taking app, using the Android Architecture Component libraries (Room, ViewModel, LiveData and LifeCycle), a RecyclerView and Java. The data will be stored in an SQLite database and supports insert, read, update and delete operations. For this we will follow the official recommendations from the “Guide to App Architecture” (link below). In part 1 we will learn what the Architecture Components are, how they work and why we need them. We will learn about the problems that arise from the Activity and Fragment lifecycle, configuration changes and bloated, tightly coupled cl...

DodgeInsetEdges

The layout_dodgeInsetEdges together with the layout_insetEdge attribute, to move views within a CoordinatorLayout out of the way of other views. This behavior is the default behavior for FloatingActionButtons and Snackbars , but we will also apply it to views like normal buttons and bottom sheets. In Mainactivity.java add the code below stated:- import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity {     private BottomSheetBehavior bottomSheetBehavior;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activ...