CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-ngx-validators

Angular form validators for passwords, emails, universal constraints, and credit cards with reactive and template-driven form support

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

email-validation.mddocs/

Email Validation

Email validation with multiple complexity levels and intelligent typo suggestion features for common email domains.

Capabilities

Simple Email Validation

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 
}

Normal Email Validation

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 
}

Email Suggestion Validation

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:

  • Uses Sift4 distance algorithm for fuzzy string matching
  • Default similarity threshold of 2 for domain matching
  • Checks both full domain matches and component-level matches (second-level + top-level domain)
  • Prioritizes exact domain matches over component matches
  • Returns null for valid emails that exactly match known domains

Email Utility Classes

EmailSuggestion Class

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' }

Template-Driven Forms Support

For template-driven forms, use the email validator directives:

EmailValidatorDirective

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>

EmailSuggestValidatorDirective

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>

Types

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;
}

docs

credit-card-validation.md

email-validation.md

form-control-utilities.md

index.md

password-validation.md

template-driven-forms.md

universal-validation.md

tile.json