Angular form validators for passwords, emails, universal constraints, and credit cards with reactive and template-driven form support
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Email validation with multiple complexity levels and intelligent typo suggestion features for common email domains.
Basic email format validation using a simple regex pattern.
/**
* Simple email validation using basic regex pattern
* @param control - AbstractControl to validate
* @returns ValidationErrors if invalid, null if valid
*/
static simple(control: AbstractControl): ValidationErrors | null;Usage Example:
import { EmailValidators } from "ngx-validators";
import { FormControl } from "@angular/forms";
const control = new FormControl('', EmailValidators.simple);
// Valid: "user@domain.com", "test@example.org"
// Invalid: "invalid-email", "user@", "@domain.com"Validation Pattern: /.+@.+\..+/i
Error Object:
{
simpleEmailRule: true
}HTML5 compliant email validation following W3C specifications.
/**
* HTML5 compliant email validation following W3C standard
* @param control - AbstractControl to validate
* @returns ValidationErrors if invalid, null if valid
*/
static normal(control: AbstractControl): ValidationErrors | null;Usage Example:
const control = new FormControl('', EmailValidators.normal);
// Valid: "user@example.com", "test.email+tag@domain.co.uk"
// Invalid: "invalid@", "user@domain", "spaces @domain.com"Validation Pattern:
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/Error Object:
{
normalEmailRule: true
}Intelligent email validation with typo detection and domain suggestions for common email providers.
/**
* Email validation with intelligent typo suggestions
* @param options - Configuration options for email suggestions
* @returns ValidatorFn that validates email and provides suggestions
*/
static suggest(options?: EmailOptions): ValidatorFn;Usage Example:
// Using default email domains and suggestions
const control = new FormControl('', EmailValidators.suggest());
// Using custom email options
const customOptions: EmailOptions = {
domains: ['gmail.com', 'yahoo.com', 'company.com'],
secondLevelDomains: ['gmail', 'yahoo', 'company'],
topLevelDomains: ['com', 'org', 'net']
};
const controlWithOptions = new FormControl('', EmailValidators.suggest(customOptions));Email Suggestion Response:
When a typo is detected, the validator returns:
{
suggestion: {
address: "user", // The user part of the email
domain: "gmail.com", // Suggested domain
full: "user@gmail.com" // Complete suggested email
}
}Default Domains: gmail.com, yahoo.com, hotmail.com, outlook.com, aol.com, icloud.com, msn.com, bellsouth.net, telus.net, comcast.net, optusnet.com.au, earthlink.net, qq.com, sky.com, mac.com, sympatico.ca, googlemail.com, att.net, xtra.co.nz, web.de, cox.net, ymail.com, aim.com, rogers.com, verizon.net, rocketmail.com, google.com, optonline.net, sbcglobal.net, me.com, btinternet.com, charter.net, shaw.ca (30 total domains)
Default Second-Level Domains: yahoo, hotmail, mail, live, outlook, gmx
Default Top-Level Domains: com, com.au, com.tw, ca, co.nz, co.uk, de, fr, it, ru, net, org, edu, gov, jp, nl, kr, se, eu, ie, co.il, us, at, be, dk, hk, es, gr, ch, no, cz, in, net.au, info, biz, mil, co.jp, sg, hu, uk (38 total TLDs)
Algorithm Details:
Core email suggestion algorithm with typo detection and domain matching.
class EmailSuggestion {
/**
* Analyze email for typos and provide suggestions
* @param email - Email address to analyze
* @param options - Configuration options for suggestions
* @returns Suggestion object if typo detected, null if valid
*/
suggest(email: string, options?: EmailOptions): { [key: string]: Suggestion } | null;
/**
* Split email into component parts for analysis
* @param email - Email address to split
* @returns SplittedEmail object with parsed components
*/
splitEmail(email: string): SplittedEmail | null;
}Usage Example:
import { EmailSuggestion } from "ngx-validators";
const emailSuggestion = new EmailSuggestion();
// Detect typo and get suggestion
const suggestion = emailSuggestion.suggest('user@gmai.com');
// Returns: { suggestion: { address: 'user', domain: 'gmail.com', full: 'user@gmail.com' } }
// Split email into parts
const parts = emailSuggestion.splitEmail('user@example.com');
// Returns: { address: 'user', domain: 'example.com', topLevelDomain: 'com', secondLevelDomain: 'example' }For template-driven forms, use the email validator directives:
Basic email validation directive.
<input
type="email"
name="email"
[(ngModel)]="user.email"
#email="ngModel"
emailValidator>
<div *ngIf="email.errors?.normalEmailRule">
Please enter a valid email address.
</div>Email validation with suggestion directive.
<input
type="email"
name="email"
[(ngModel)]="user.email"
#email="ngModel"
emailSuggestValidator>
<div *ngIf="email.errors?.suggestion">
Did you mean: {{email.errors.suggestion.full}}?
</div>interface EmailOptions {
domains: string[];
secondLevelDomains: string[];
topLevelDomains: string[];
}
interface Suggestion {
address: string;
domain: string;
full: string;
}
interface SplittedEmail {
topLevelDomain: string;
secondLevelDomain: string;
domain: string;
address: string;
}