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
Angular form validators library providing comprehensive validation rules for Angular 13+ applications. Supports both reactive forms (model-driven) and template-driven forms through validator functions and directives, with specialized validators for passwords, emails, universal constraints, and credit cards.
npm install ngx-validatorsimport {
PasswordValidators,
EmailValidators,
UniversalValidators,
CreditCardValidators,
EqualToValidator,
ValidatorsModule
} from "ngx-validators";For Angular module setup:
import { ValidatorsModule } from "ngx-validators";
@NgModule({
imports: [ValidatorsModule],
// ...
})
export class AppModule {}import { FormBuilder, FormGroup } from "@angular/forms";
import { PasswordValidators, EmailValidators } from "ngx-validators";
export class MyComponent {
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
email: ['', [EmailValidators.normal]],
password: ['', [
PasswordValidators.digitCharacterRule(1),
PasswordValidators.lowercaseCharacterRule(1),
PasswordValidators.uppercaseCharacterRule(1)
]],
confirmPassword: [''],
age: ['', [UniversalValidators.isNumber, UniversalValidators.min(18)]]
}, {
validators: [PasswordValidators.mismatchedPasswords('password', 'confirmPassword')]
});
}
}<form>
<input
name="email"
[(ngModel)]="user.email"
#email="ngModel"
emailValidator>
<input
name="password"
[(ngModel)]="user.password"
#password="ngModel"
[password]="true"
[digitCharacter]="1"
[lowercaseCharacter]="1"
[uppercaseCharacter]="1">
<input
name="age"
[(ngModel)]="user.age"
#age="ngModel"
isNumber
[min]="18">
</form>ngx-validators is built around several key components:
Comprehensive password strength validation including character requirements, repetition limits, and confirmation matching.
class PasswordValidators {
static repeatCharacterRegexRule(repeatCount: number): ValidatorFn;
static alphabeticalCharacterRule(amount: number): ValidatorFn;
static digitCharacterRule(amount: number): ValidatorFn;
static lowercaseCharacterRule(amount: number): ValidatorFn;
static uppercaseCharacterRule(amount: number): ValidatorFn;
static specialCharacterRule(amount: number): ValidatorFn;
static allowedCharacterRule(allowedChars: string[]): ValidatorFn;
static mismatchedPasswords(passwordControlName?: string, confirmPasswordControlName?: string): ValidatorFn;
}Email validation with HTML5 compliance and intelligent typo suggestion features for common email domains.
class EmailValidators {
static simple(control: AbstractControl): ValidationErrors | null;
static normal(control: AbstractControl): ValidationErrors | null;
static suggest(options?: EmailOptions): ValidatorFn;
}Common data validation rules for whitespace, numeric ranges, string lengths, dates, and data types.
class UniversalValidators {
static noWhitespace(control: AbstractControl): ValidationErrors | null;
static noEmptyString(control: AbstractControl): ValidationErrors | null;
static isNumber(control: AbstractControl): ValidationErrors | null;
static isInRange(minValue: number, maxValue: number): ValidatorFn;
static minLength(minLength: number): ValidatorFn;
static maxLength(maxLength: number): ValidatorFn;
static min(min: number): ValidatorFn;
static max(max: number): ValidatorFn;
static minDate(minDate: Date): ValidatorFn;
static maxDate(minDate: Date): ValidatorFn;
static type(type: "number" | "string" | "object" | "boolean"): ValidatorFn;
}Credit card format validation for major card types including Visa, MasterCard, American Express, and more.
class CreditCardValidators {
static isCreditCard(control: AbstractControl): ValidationErrors | null;
static americanExpress(control: AbstractControl): ValidationErrors | null;
static dinersclub(control: AbstractControl): ValidationErrors | null;
static discover(control: AbstractControl): ValidationErrors | null;
static jcb(control: AbstractControl): ValidationErrors | null;
static maestro(control: AbstractControl): ValidationErrors | null;
static mastercard(control: AbstractControl): ValidationErrors | null;
static visa(control: AbstractControl): ValidationErrors | null;
}Angular directives for using validators in template-driven forms with two-way data binding support.
@NgModule({
declarations: [/* all validator directives */],
exports: [/* all validator directives */]
})
export class ValidatorsModule {}Utility functions for form control manipulation and validation state management.
class AbstractControlUtil {
static isNotPresent(control: AbstractControl): boolean;
static addError(control: AbstractControl | null, errorId: string, value: any): void;
static removeError(control: AbstractControl | null, errorId: string): void;
}
class EqualToValidator {
static equalTo(c1Name: string, c2Name: string): ValidatorFn;
}Complete email processing utilities including suggestion algorithms and email parsing.
interface EmailOptions {
domains: string[];
secondLevelDomains: string[];
topLevelDomains: string[];
}
interface SplittedEmail {
topLevelDomain: string;
secondLevelDomain: string;
domain: string;
address: string;
}
interface Suggestion {
address: string;
domain: string;
full: string;
}
class EmailSuggestion {
suggest(email: string, options?: EmailOptions): { [key: string]: Suggestion } | null;
splitEmail(email: string): SplittedEmail | null;
}// Angular Forms types (external dependency)
interface AbstractControl {
value: any;
errors: ValidationErrors | null;
// ... other Angular AbstractControl properties
}
interface ValidationErrors {
[key: string]: any;
}
interface ValidatorFn {
(control: AbstractControl): ValidationErrors | null;
}
// Email validation 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;
}