Angular 15 Email validation example |How to check Email invalid or not in typescript?
You will learn how to do email validation in Angular and Typescript applications with input forms.
Email validation is one of the basic validation to avoid invalid emails.
In Angular, validations can be done using two approaches. -Reactive forms
- Template Driven Forms email pattern validation implemented with multiple approaches
We already have a pre-created angular application - angular-form-validations.
Angular Email Validation reactive forms
Email Validations are implemented in Reactive forms using in-built Angular directives. For Angular applications to use reactive forms,
In app.module.ts
, first import the FormsModule
and ReactiveFormsModule
modules.
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
Let’s create a new component reactive-email-validation
using the ng g component command.
A:\work\angular-form-validations>ng g component reactive-email-validation
CREATE src/app/reactive-email-validation/reactive-email-validation.component.html (40 bytes)
CREATE src/app/reactive-email-validation/reactive-email-validation.component.spec.ts (747 bytes)
CREATE src/app/reactive-email-validation/reactive-email-validation.component.ts (350 bytes)
CREATE src/app/reactive-email-validation/reactive-email-validation.component.scss (0 bytes)
UPDATE src/app/app.module.ts (973 bytes)
To begin, an HTML template component is constructed in Angular to display the input form with an email field.
- Define the form element with
FormGroup directive
with emailForm binding - Inside the form, define the input element with
formControlName
name email - validation errors are bound and available with
emailForm.controls[email]
- Validation check added for input box is not empty(errors.required) and focus is in it(touched)
- if bound errors contains required, display the error message ‘Email is required
- if errors contain the pattern, display the error message ‘Invalid Email’.
<p>Angular Email Validation with Reactive form!</p>
<div>
<h2>{{ heading | titlecase }}</h2>
<form [formGroup]="emailForm">
<input type="text" formControlName="email" />
<div
*ngIf="!emailForm.controls['email'].valid && emailForm.controls['email'].touched"
>
<div
*ngIf="emailForm.controls['email'].errors?['required']"
style=" background-color: red"
>
Email is required
</div>
<div
*ngIf="emailForm.controls['email'].errors?['required']"
style="background-color: red"
>
Invalid Email
</div>
</div>
</form>
<button type="submit ">Submit</button>
</div>
Next, In the application controller component, define the logic for regex pattern validation.
- Declared emailForm of type
FormGroup
which already has a binding to form element. - Defined the
email regular expression pattern
into variable - In the constructor, initialized emailForm with a new FormControl element ie email
- these email form control will be bound with the input element in the HTML template
Validators.required
added for not empty validation checkValidators.pattern
added for email regular expression- These validations are checked with
blur
event `updateOn: blur’ property
import { Component, OnInit } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
@Component({
selector: "app-reactive-email-validation",
templateUrl: "./reactive-email-validation.component.html",
styleUrls: ["./reactive-email-validation.component.scss"],
})
export class ReactiveEmailValidationComponent {
heading = "angular Email pattern validation with examples";
emailForm: FormGroup;
myusername: string = "";
emailRegex = "^[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$";
constructor() {
this.emailForm = new FormGroup({
email: new FormControl("", {
validators: [Validators.required, Validators.pattern(this.emailRegex)],
updateOn: "blur",
}),
});
}
submit() {
console.log(this.emailForm.value);
}
get validator() {
return true;
}
}
Angular email template-driven form validation using html5
In modern browsers, the Easy approach is to do email pattern validation with inbuilt html5 language.
Another way to do email validation is to define the input type=email
in the HTML element. However, this supports html5 only and modern browsers.
Input is defined with the following attributes
<input
type="email"
name="email"
id="email"
placeholder="[email protected]"
[(ngModel)]="email"
[ngModelOptions]="{ updateOn: 'blur' }"
#emailerror="ngModel"
pattern="^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$ "
required
/>
type=email
is an input textbox, that accepts email only pattern
attribute value is a regular expression pattern for email values NgModel
directive is to support two-way binding from view to controller and vice versa The ngModelOptions
directive enables to change of the behavior of the ngModel value, this will be fired with the updateon:blur
event.
Following is a complete code
<div>
<input
type="email"
name="email"
id="email"
placeholder="[email protected]"
[(ngModel)]="email"
[ngModelOptions]="{ updateOn: 'blur' }"
#emailerror="ngModel"
pattern="^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$ "
required
/>
<div *ngIf="emailerror.invalid && (emailerror.dirty || emailerror.touched)">
<div *ngIf="emailerror.errors.required">
<span style="background-color: red">Email is required </span>
</div>
<div *ngIf="emailerror.errors.pattern">
<span style="background-color: red">Invalid EmailL </span>
</div>
</div>
</div>
In the component, just declare the input element’s name here with a default value.
import { Component } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.scss"],
})
export class AppComponent {
heading = "angular html5 Email pattern validation example";
email: string = "";
}
Typescript email regexp validation
Sometimes, We want to do a validation typescript file.
- It uses the same above regular expression pattern for email validation
- RegExp object is created with regex
pattern. test
checked against supplied email and return true-valid
public isValidEmail(emailString: string): boolean {
try {
let pattern = new RegExp("^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$");
let valid = pattern.test(emailString);
return valid;
} catch (TypeError) {
return false;
}
}
}
}
console.log(this.isValidEmail('[email protected]')); // true
console.log(this.isValidEmail('abc')); // false
a
Conclusion
In this post, You learned
- Angular email pattern validation example with reactive forms
- HTML 5 input type email form validation
- Typescript email validation