@rxweb/reactive-form-validators
    TypeScript icon, indicating that this package has built-in type declarations

    2.1.4 • Public • Published

    Build Status Gitter npm version GitHub license PRs Welcome

    rxweb

    The most powerful validation framework for angular based enterprise application. This provides all type of complex validation and dynamic validation on Reactive Form, Template Driven Form and Model Based Form.

    Angular forms provides good feature, but at some level code become messy to fulfil the complex validation scenarios, so the core objective is to provide optimum solution for basic, complex, conditional and dynamic validation for angular based enterprise applications. This validation framework is an extension of angular forms library, which will help to fulfil the need with less lines of code.

    For More Information on rxweb

    Prerequisites

    Reactive Form Validators will work in angular projects.

    Table of Contents

    Installation

    $ npm install @rxweb/reactive-form-validators

    Import modules

    To work on form it is require to import angular modules(FormsModule and ReactiveFormsModule) and also import RxReactiveFormsModule which provides advanced/dynamic level validation features. All three modules register in the NgModule decorator imports property.

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    
    import { FormsModule, ReactiveFormsModule} from '@angular/forms'; // <-- #1 import module
    import { RxReactiveFormsModule } from '@rxweb/reactive-form-validators'; // <-- #2 import module
    
    
    import {AppComponent} from './app.component';
    
    @NgModule({
      declarations:[AppComponent],
      imports:[ BrowserModule, 
    	FormsModule,
    	ReactiveFormsModule, 
    	RxReactiveFormsModule
    	] 
      providers: [], 
      bootstrap: [AppComponent]
    })
    export class AppModule { }

    Form Validation

    Three ways to apply validation on the form via Validators, Validation Decorators or Template Form.

    1. allOf
    2. alpha
    3. alphaNumeric
    4. ascii
    5. choice
    6. compare
    7. compose
    8. contains
    9. creditCard
    10. dataUri
    11. different
    12. digit
    13. email
    14. endsWith
    15. even
    16. extension
    17. factor
    18. file
    19. fileSize
    20. greaterThanEqualTo
    21. greaterThan
    22. ip
    23. image
    24. hexColor
    25. json
    26. latitude
    27. latLong
    28. leapYear
    29. lessThanEqualTo
    30. lessThan
    31. longitude
    32. lowerCase
    33. mac
    34. maxDate
    35. maxLength
    36. maxNumber
    37. minDate
    38. minLength
    39. minNumber
    40. noneOf
    41. numeric
    42. odd
    43. oneOf
    44. password
    45. pattern
    46. port
    47. primeNumber
    48. range
    49. required
    50. startsWith
    51. time
    52. unique
    53. upperCase
    54. url

    allOf

    allOf validation will check whether the user has entered all of the values of given field or not.

    Reactive Form Validation

      this.employeeInfoFormGroup = this.formBuilder.group({
               skills:[RxwebValidators.allOf({matchValues:["MVC", "AngularJS","AngularJS 5","C#"]})], 
            });

    Template Form Validation

     <input id="skills"  name="skills" type="checkbox" value="{{tag.name}}" 
            [(ngModel)]="employee.skills" [allOf]='{"matchValues":"MVC","AngularJS","AngularJS","C#"}'/>{{tag.name}}

    Decorator Based Validation

      @allOf({matchValues: ["MVC", "AngularJS","Angular 5","C#"]}) skills: string[];

    alpha

    Alpha validation will allow only alphabets to be entered. It will not allow any digit or special character.

    Reactive Form Validation

    this.countryFormGroup = this.formBuilder.group({
                countryName:['', RxwebValidators.alpha()], 
            });

    Template Form Validation

    <input id="countryName" name="countryName" class="form-control"
             [(ngModel)]="country.countryName" alpha >

    Decorator Based Validation

    @alpha() countryName: string;

    alphaNumeric

    Alpha Numeric validation will allow only alphabets and numbers to be entered, It will not allow any special character.

    Reactive Form Validation

      this.locationFormGroup = this.formBuilder.group({
                areaName:['', RxwebValidators.alphaNumeric()], 
            });

    Template Form Validation

    <input id="areaName" name="areaName" class="form-control"
             [(ngModel)]="location.areaName" alphaNumeric >

    Decorator Based Validation

    @alphaNumeric() areaName: string;

    ascii

    ascii validation decorator allows user to enter the input which is in the proper ascii format.

    Reactive Form Validation

       this.userFormGroup = this.formBuilder.group({
                specialCharAsciiCode:['', RxwebValidators.ascii()], 
            });

    Template Form Validation

    <input id="specialCharAsciiCode" name="specialCharAsciiCode" class="form-control"
             [(ngModel)]="user.specialCharAsciiCode" ascii >

    Decorator Based Validation

    @ascii() specialCharAsciiCode: string;

    choice

    choice validation will check whether the value entered is matching the properties defined.

    Reactive Form Validation

      this.employeeInfoFormGroup = this.formBuilder.group({
               skills:[RxwebValidators.choice({minLength:5})], 
            });

    Template Form Validation

     <input id="skills"  name="skills" type="checkbox" value="{{tag.name}}"
            [(ngModel)]="employee.skills" [choice]='{"minLength":"5"}'/>{{tag.name}}

    Decorator Based Validation

     @choice({minLength:'5'}) skills: string[]; 

    compare

    Compare validation will compare two inputs whether they are same or not.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                password:['',], 
                confirmPassword:['', RxwebValidators.compare({fieldName:'password' })], 
            });

    Template Form Validation

    <input id="confirmPassword" name="confirmPassword" class="form-control"
             [(ngModel)]="user.confirmPassword" [compare]='{"fieldName":"password"}'] >

    Decorator Based Validation

    @compare({fieldName:'password'}) confirmPassword: string;

    compose

    Compose validation decorator is used to apply multiple validations on a particular field.

    Reactive Form Validation

    this.userForm = this.formBuilder.group({
      Username:['',[ RxwebValidators.compose({
    validators:[
    RxwebValidators.required(),
    RxwebValidators.alpha()
    ],]]
    });

    Template Form Validation

    <input id="Username" name="Username" class="form-control"
             [(ngModel)]="user.Username" [compose]='{"validators":[alpha,required]}' >

    Decorator Based Validation

    @compose({validators:[alpha,required]}) Username: string;

    contains

    Contains validation will check that value is in the input, It will not allow to enter input that not contains the predefined value.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                emailAddress:['', RxwebValidators.contains({value:'@gmail.com' })], 
            });

    Template Form Validation

    <input id="emailAddress" name="emailAddress" class="form-control"
             [(ngModel)]="user.emailAddress" [contains]='{"fieldName":"@gmail.com"}' >

    Decorator Based Validation

    @contains({value:'@gmail.com'}) emailAddress: string;

    creditCard

    creditCard validation will check property value is creditcardtype or not, It will not allow to enter any value other than credit card format.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                cardType:['',], 
                creditCardNumber:['', RxwebValidators.creditCard({fieldName:'cardType' })], 
            });

    Template Form Validation

    <input id="creditCardNumber" name="creditCardNumber" class="form-control"
             [(ngModel)]="user.creditCardNumber" [creditCard]='{"fieldName":"cardType"}' >

    Decorator Based Validation

    @creditCard({fieldName:'cardType' }) creditCardNumber: string;

    dataUri

    dataUri validation allows user to enter the input which is a valid data Uri.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                htmlDataUri:['', RxwebValidators.dataUri()], 
            });

    Template Form Validation

    <input id="htmlDataUri" name="htmlDataUri" class="form-control"
             [(ngModel)]="user.htmlDataUri" dataUri >

    Decorator Based Validation

    @dataUri() htmlDataUri: string;

    different

    Different validation will check two inputs whether they are different or not. It is just opposite of compare decorator.

    Reactive Form Validation

     this.accountInfoFormGroup = this.formBuilder.group({
                firstName:['',], 
                lastName:['', RxwebValidators.different({fieldName:"firstName" })], 
            });

    Template Form Validation

    <input id="lastName" name="lastName" class="form-control"
             [(ngModel)]="account.lastName" [different]='{"fieldName":"firstName"}' >

    Decorator Based Validation

    @different({fieldName:"firstName" }) lastName: string;

    digit

    Digit validation will allow only digits to be entered, It will not allow any alphabets or special character.

    Reactive Form Validation

       this.userFormGroup = this.formBuilder.group({
                age:['', RxwebValidators.digit()], 
            });

    Template Form Validation

    <input id="age" name="age" class="form-control"
             [(ngModel)]="user.age" digit >

    Decorator Based Validation

    @digit() age: number;

    email

    Email validation will only allow user to enter input which is in the correct email format.

    Reactive Form Validation

       this.userFormGroup = this.formBuilder.group({
                email:['', RxwebValidators.email()], 
            });

    Template Form Validation

    <input id="email" name="email" class="form-control"
             [(ngModel)]="user.email" email >

    Decorator Based Validation

    @email() email: string;

    endsWith

    endsWith validation allows user to enter the input which ends with particular value.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                name:['', RxwebValidators.endsWith({value:'m' })], 
            });

    Template Form Validation

    <input id="name" name="name" class="form-control"
             [(ngModel)]="user.name" [endsWith]='{"value":"m"}' >

    Decorator Based Validation

    @endsWith({value:'m' }) name: string;

    even

    Even validation will check whether the value entered by user is an even number or not.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                evenNumber:['', RxwebValidators.even()], 
            });

    Template Form Validation

    <input id="evenNumber" name="evenNumber" class="form-control"
             [(ngModel)]="user.evenNumber" even >

    Decorator Based Validation

    @even() evenNumber: number;

    extension

    extension validation allows user to enter the input which is in the proper extension format.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                Image :['', RxwebValidators.extension({extensions:'png','jpg'})], 
            });

    Template Form Validation

    <input id="Image" name="Image" class="form-control"
             [(ngModel)]="user.Image" [extension]='{"extensions":"png":"jpg"}' >

    Decorator Based Validation

    @extension({extensions:'png','jpg'}) Image: string;

    factor

    factor validation will allow user to enter factor of a number which is called dividend.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                firstNumber:['', RxwebValidators.factor({dividend:50 })], 
            });

    Template Form Validation

    <input id="firstNumber" name="firstNumber" class="form-control"
             [(ngModel)]="user.firstNumber" [factor]='{"dividend":"50"}' >

    Decorator Based Validation

    @factor({dividend:50 })	firstNumber: Number;

    file

    file validation validators allows user to validate whether how many files can be uploaded . It depends upon maxFiles and minFiles.

    Reactive Form Validation

       this.userInfoFormGroup = this.formBuilder.group({
                totalDocumentFiles:['', RxwebValidators.file({minFiles:5 })], 
            });

    Template Form Validation

     <input type="file" name="totalImageFiles" multiple [(ngModel)]="userinfo.totalImageFiles"  class="form-control" [file]="             {'maxFiles':5}"/>

    Decorator Based Validation

    	@file({maxFiles:5 }) 
    	totalImageFiles: number;

    fileSize

    fileSize validation allows user to enter the input which is in the proper file size format.

    Reactive Form Validation

       this.storageCapacityFormGroup = this.formBuilder.group({
                videoStorageSize:['', RxwebValidators.fileSize({maxSize:50 })], 
            });

    Template Form Validation

    <input id="videoStorageSize" name="videoStorageSize" class="form-control"
             [(ngModel)]="storage.videoStorageSize" [fileSize]='{"maxSize":"50"}' >

    Decorator Based Validation

    @fileSize({maxSize:50 }) videoStorageSize: string;

    greaterThanEqualTo

    Greater than equal to validation decorator will check that input property is greater than or equal to the related field input.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                age:['',], 
                voterAge:['', RxwebValidators.greaterThanEqualTo({fieldName:'age' })], 
            });

    Template Form Validation

    <input id="voterAge" name="voterAge" class="form-control"
             [(ngModel)]="user.voterAge" [greaterThanEqualTo]='{"fieldName":"age"}' >

    Decorator Based Validation

    @greaterThanEqualTo({fieldName:'age' }) voterAge: number;

    greaterThan

    Greater than validation will check that input property is greater than related field input.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                age:['',], 
                voterAge:['', RxwebValidators.greaterThan({fieldName:'age' })], 
            });

    Template Form Validation

    <input id="voterAge" name="voterAge" class="form-control"
             [(ngModel)]="user.voterAge" [greaterThan]='{"fieldName":"age"}' >

    Decorator Based Validation

    @greaterThan({fieldName:'age' }) voterAge: number;

    hexColor

    HexColor validation will allow user to enter only the input in proper Hex Color format.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                color:['', RxwebValidators.hexColor()], 
            });

    Template Form Validation

    <input id="color" name="color" class="form-control"
             [(ngModel)]="user.color" hexColor >

    Decorator Based Validation

    @hexColor() color: string;

    ip

    ip validation validators is used to validate the ip address of the device.

    Reactive Form Validation

        this.userFormGroup = this.formBuilder.group({
                ipV4:['', RxwebValidators.ip({version:1 })], 
            });

    image

    image validation validators allows user to validate image like height,width etc .

    Reactive Form Validation

       this.userInfoFormGroup = this.formBuilder.group({
                profilePhoto:['', RxwebValidators.image({maxHeight:100  ,maxWidth:100 })], 
            });

    Template Form Validation

      <input type="file" name="profilePhoto"  [(ngModel)]="userinfo.profilePhoto"  class="form-control" [image]="{'maxHeight':100,'maxWidth':100}"/>

    Decorator Based Validation

    	@image({maxHeight:100  ,maxWidth:100 }) 
    	profilePhoto: string;

    json

    json validation will allow user to enter the input only in proper Json format.

    Reactive Form Validation

     this.jsonInfoFormGroup = this.formBuilder.group({
                locationJson:['', RxwebValidators.json()], 
            });

    Template Form Validation

    <input id="locationJson" name="locationJson" class="form-control"
             [(ngModel)]="json.locationJson" json >

    Decorator Based Validation

    @json() locationJson: string;

    latitude

    latitude validation allows user to enter value which is valid latitude.

    Reactive Form Validation

    this.numberInfoFormGroup = this.formBuilder.group({
                firstCountryLatitude:['', RxwebValidators.latitude()], 
            });

    Template Form Validation

    <input id="firstCountryLatitude" name="firstCountryLatitude" class="form-control"
             [(ngModel)]="number.firstCountryLatitude" latitude >

    Decorator Based Validation

    @latitude() firstCountryLatitude: string;

    leapYear

    LeapYear validation will check whether the value entered is a leap year or not.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                birthYear:['', RxwebValidators.leapYear()], 
            });

    Template Form Validation

    <input id="birthYear" name="birthYear" class="form-control"
             [(ngModel)]="user.birthYear" leapYear >

    Decorator Based Validation

    @leapYear() birthYear: number;

    latLong

    latLong validation allows user to enter the input which is valid Latitude or longitude.

    Reactive Form Validation

     this.countryFormGroup = this.formBuilder.group({
                firstCountry:['', RxwebValidators.latLong()], 
            });

    Template Form Validation

    <input id="firstCountry" name="firstCountry" class="form-control"
             [(ngModel)]="country.firstCountry" latLong >

    Decorator Based Validation

    @latLong() firstCountry: string;

    lessThanEqualTo

    Less than equal to validation will allow the user to enter only that value which is less than oe equal to the value in the pre defined field.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                totalMarks:['',], 
                marks:['', RxwebValidators.lessThanEqualTo({fieldName:'totalMarks' })], 
            });

    Template Form Validation

    <input id="marks" name="marks" class="form-control"
             [(ngModel)]="user.marks" [lessThanEqualTo]='{"fieldName":"totalMarks"}' >

    Decorator Based Validation

    @lessThanEqualTo({fieldName:'totalMarks' }) marks: number;

    lessThan

    Less than validation will allow the user to enter only that value which is less than the value in the pre defined field.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                marks:['',], 
                passingMarks:['', RxwebValidators.lessThan({fieldName:'marks' })], 
            });

    Template Form Validation

    <input id="passingMarks" name="passingMarks" class="form-control"
             [(ngModel)]="user.passingMarks" [lessThan]='{"fieldName":"marks"}' >

    Decorator Based Validation

    @lessThan({fieldName:'marks' }) passingMarks: number;

    longitude

    longitude validation allows user to enter the input which is in the proper longitude format.

    Reactive Form Validation

       this.numberInfoFormGroup = this.formBuilder.group({
                firstCountryLongitude:['', RxwebValidators.longitude()], 
            });

    Template Form Validation

    <input id="firstCountryLongitude" name="firstCountryLongitude" class="form-control"
             [(ngModel)]="number.firstCountryLongitude" longitude >

    Decorator Based Validation

    @longitude() firstCountryLongitude: string;

    lowercase

    lowerCase validation will allow user to enter only the lowercase alphabets.

    Reactive Form Validation

         this.userInfoFormGroup = this.formBuilder.group({
                username:['', RxwebValidators.lowerCase()], 
            });

    Template Form Validation

    <input id="username" name="username" class="form-control"
             [(ngModel)]="user.username" lowercase >

    Decorator Based Validation

    @lowerCase() username: string;

    mac

    mac validation will check whether the value entered is a valid mac address.

    Reactive Form Validation

         this.macAddressInfoFormGroup = this.formBuilder.group({
                systemMacAddress:['', RxwebValidators.mac()], 
            });

    Template Form Validation

    <input id="systemMacAddress" name="systemMacAddress" class="form-control"
             [(ngModel)]="macAddress.systemMacAddress" mac >

    Decorator Based Validation

    @mac() systemMacAddress: string;

    maxDate

    MaxDate validation will allow user to enter the date less than the maxDate value parameter.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                registrationDate:['', RxwebValidators.maxDate({value:new Date(2018,7,30) })], 
            });

    Template Form Validation

    <input id="registrationDate" name="registrationDate" class="form-control"
             [(ngModel)]="user.registrationDate" [maxDate]='{"value":"2018-07-30"}' >

    Decorator Based Validation

    @maxDate({value:new Date(2018,7,30) }) registrationDate: Date;

    maxLength

    MaxLength validation will allow user to enter the input upto the maximum length value parameter.

    Reactive Form Validation

      this.locationFormGroup = this.formBuilder.group({
                firstName:['', RxwebValidators.maxLength({value:10 })], 
            });

    Template Form Validation

    <input id="firstName" name="firstName" class="form-control"
             [(ngModel)]="location.firstName" [maxLength]='{"value":"10"}' >

    Decorator Based Validation

    @maxLength({value:10 })	firstName: string;

    maxNumber

    MaxNumber validation will allow user to enter the input upto the maximum number value parameter.

    Reactive Form Validation

     this.subjectDetailsFormGroup = this.formBuilder.group({
                passingMarks:['', RxwebValidators.maxNumber({value:50 })], 
            });

    Template Form Validation

    <input id="passingMarks" name="passingMarks" class="form-control"
             [(ngModel)]="subject.passingMarks" [maxNumber]='{"value":"50"}' >

    Decorator Based Validation

    @maxNumber({value:50 }) passingMarks: number;

    minDate

    Minimum Date validation will allow user to enter date greater the minimum date value parameter.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                registrationDate:['', RxwebValidators.minDate({value:new Date(2018,7,30) })], 
            });

    Template Form Validation

    <input id="registrationDate" name="registrationDate" class="form-control"
             [(ngModel)]="user.registrationDate"  [minDate]='{"value":"2018-07-30"}' >

    Decorator Based Validation

    @minDate({value:new Date(2018,7,30) }) registrationDate: Date;

    minLength

    MinLength validation will allow user to enter the input length matching the minimum length value parameter.

    Reactive Form Validation

    this.contactFormGroup = this.formBuilder.group({
                countryName:['', RxwebValidators.minLength({value:8 })], 
            });

    Template Form Validation

    <input id="countryName" name="countryName" class="form-control"
             [(ngModel)]="country.countryName" [minLength]='{"value":"8"}' >

    Decorator Based Validation

    @minLength({value:8 }) countryName: string;

    minNumber

    MinNumber validation will allow user to enter the input greater than the minimum number value parameter.

    Reactive Form Validation

      this.resultInfoFormGroup = this.formBuilder.group({
                maths:['', RxwebValidators.minNumber({value:35 })], 
            });

    Template Form Validation

    <input id="maths" name="maths" class="form-control"
             [(ngModel)]="result.maths" [minNumber]='{"value":"35"}' >

    Decorator Based Validation

    	@minNumber({value:35 }) maths: number;

    noneOf

    noneOf validation will check whether the user has entered none of the value is selected from the given inputs.

    Reactive Form Validation

      this.employeeInfoFormGroup = this.formBuilder.group({
               skills:[RxwebValidators.noneOf({matchValues:["MVC", "AngularJS","Angular 5","C#"]})], 
            });

    Template Form Validation

     <input id="skills"  name="skills" type="checkbox" value="{{tag.name}}" 
            [(ngModel)]="employee.skills" [noneOf]='{"matchvalues":"MVC","AngularJS","Angular 5","C#"}'/>{{tag.name}}

    Decorator Based Validation

      @noneOf({matchValues: ["MVC", "AngularJS","Angular 5","C#"]})  skills: string[];

    numeric

    numeric validation will check whether the value entered is a valid numberic value or not.The validation can be set according to requirement, it can be either decimal,negative number or positive number.

    Reactive Form Validation

     this.userInfoFormGroup = this.formBuilder.group({
                integerNumber:['', RxwebValidators.numeric({acceptValue:NumericValueType.PositiveNumber  ,allowDecimal:false })], 
            });

    Template Form Validation

    <input id="integerNumber" name="integerNumber" class="form-control"
             [(ngModel)]="user.integerNumber" [numeric]='{"acceptValue":"NumericValueType.PositiveNumber","allowDecimal":"false"}' >

    Decorator Based Validation

    	@numeric({acceptValue:NumericValueType.PositiveNumber  ,allowDecimal:false }) integerNumber: number;

    odd

    Odd validation will check whether the value entered is an odd number or not.

    Reactive Form Validation

      this.userFormGroup = this.formBuilder.group({
                oddNumber:['', RxwebValidators.odd()], 
            });

    Template Form Validation

    <input id="oddNumber" name="oddNumber" class="form-control"
             [(ngModel)]="user.oddNumber" odd >

    Decorator Based Validation

    	@odd() oddNumber: number;

    oneOf

    oneOf validation will check whether the user has entered any one of the given inputs or not.

    Reactive Form Validation

        this.employeeInfoFormGroup = this.formBuilder.group({
               skills:[RxwebValidators.oneOf({matchValues:["MVC", "AngularJS","Angular 5","C#"]})], 
            });

    Template Form Validation

     <input id="skills"  name="skills" type="checkbox" value="{{tag.name}}" 
            [(ngModel)]="employee.skills" [oneOf]='{"matchvalues":"MVC","AngularJS","Angular 5","C#"}'/>{{tag.name}}

    Decorator Based Validation

     @oneOf({matchValues: ["MVC", "AngularJS","Angular 5","C#"]}) skills: string[];

    password

    Password validation will allow user to enter only the input according to correct password validation format.

    Reactive Form Validation

      this.loginInfoFormGroup = this.formBuilder.group({
                password:['', RxwebValidators.password({validation:{maxLength: 10,minLength: 5,digit: true,specialCharacter: true} })], 
            });

    Template Form Validation

     <input id="password" name="password" class="form-control"
             [(ngModel)]="login.password" [password]='{"validation":{maxLength: 10,minLength: 5,digit: true,specialCharacter: true}}' >
     >

    Decorator Based Validation

    @password({validation:{maxLength: 10,minLength: 5,digit: true,specialCharacter: true} })	password: string;

    pattern

    Pattern validation will allow user to enter the input which match the predefined pattern value parameter.

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
                userName:['', RxwebValidators.pattern({expression:{'onlyAlpha': /^[A-Za-z]+$/} })], 
            });

    Template Form Validation

     <input id="userName" name="userName" class="form-control"
             [(ngModel)]="user.userName" [pattern]='{"expression":{'onlyAlpha': /^[A-Za-z]+$/}}' >

    Decorator Based Validation

    	@pattern({expression:{'onlyAlpha': /^[A-Za-z]+$/} }) userName: string;

    port

    port validation allows user to enter the input which is a valid port number.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                educationalWebsitePort:['', RxwebValidators.port()], 
            });

    Template Form Validation

     <input id="educationalWebsitePort" name="educationalWebsitePort" class="form-control"
             [(ngModel)]="user.educationalWebsitePort" port >

    Decorator Based Validation

    		@port()	educationalWebsitePort: string;

    primeNumber

    primeNumber validation allows user to enter only prime number.

    Reactive Form Validation

     this.numberInfoFormGroup = this.formBuilder.group({
                firstNumber:['', RxwebValidators.primeNumber()], 
            });

    Template Form Validation

     <input id="firstNumber" name="firstNumber" class="form-control"
             [(ngModel)]="user.firstNumber" primeNumber >

    Decorator Based Validation

    	@primeNumber() firstNumber: string;

    range

    Range validation will check that the entered value is in the specified range

    Reactive Form Validation

    this.employeeInfoFormGroup = this.formBuilder.group({
                age:['', RxwebValidators.range({minimumNumber:18  ,maximumNumber:60 })], 
            });

    Template Form Validation

     <input id="age" name="age" class="form-control"
             [(ngModel)]="employee.age" [range]='{"minimumNumber":"18","maximumNumber":"60"}' >

    Decorator Based Validation

      @range({minimumNumber:18  ,maximumNumber:60 }) age: number;

    required

    Required validation will check that the user has entered the value in the property or not.

    Reactive Form Validation

    this.userInfoFormGroup = this.formBuilder.group({
                firstName:['', RxwebValidators.required()], 
            });

    Template Form Validation

     <input id="firstName" name="firstName" class="form-control"
             [(ngModel)]="user.firstName" required >

    Decorator Based Validation

     @required() firstName: string;

    startsWith

    startsWith validation allows user to enter the input which starts with particular value.

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                name:['', RxwebValidators.startsWith({value:'n' })], 
            });

    Template Form Validation

     <input id="name" name="name" class="form-control"
             [(ngModel)]="user.name" [startsWith]='{"value":"n"}'>

    Decorator Based Validation

     @startsWith({value:'n' }) name: string;

    time

    time validation will allow user to enter the input only in the correct time format.

    Reactive Form Validation

      this.attandanceDetailFormGroup = this.formBuilder.group({
                entryTime:['', RxwebValidators.time()], 
            });

    Template Form Validation

     <input id="entryTime" name="entryTime" class="form-control"
             [(ngModel)]="attandance.entryTime" time >

    Decorator Based Validation

    	@time() entryTime: string;

    unique

    Unique validation validators is used to validate unique input based on formArray.

    Reactive Form Validation

     this.employeeFormGroup = this.formBuilder.group({
                fullName:[''], 
                skills:this.formBuilder.array([
                  this.getSkillFormGroup()
                ])
            });
            
             addSkill(){
            let skillsArray = <FormArray>this.employeeFormGroup.controls.skills;
            skillsArray.push(this.getSkillFormGroup());
          }
          
         getSkillFormGroup(){
            return this.formBuilder.group({
              skillName:['',RxwebValidators.unique()]
            })
          }

    Decorator Based Validation

      @unique()
    	skillName: string[];

    upperCase

    UpperCase validation will allow user to enter the alphabets only in the upperCase format.

    Reactive Form Validation

            this.locationFormGroup = this.formBuilder.group({
                countryName:['', RxwebValidators.upperCase()], 
            });

    Template Form Validation

     <input id="countryName" name="countryName" class="form-control"
             [(ngModel)]="location.countryName" upperCase >

    Decorator Based Validation

    @upperCase() countryName: string;

    url

    Url validation will check that value entered in the property is in the correct url format or not.

    Reactive Form Validation

          this.webSiteInfoModelFormGroup = this.formBuilder.group({
                adminWebsiteUrl:['', RxwebValidators.url()], 
            });

    Template Form Validation

     <input id="adminWebsiteUrl" name="adminWebsiteUrl" class="form-control"
             [(ngModel)]="website.adminWebsiteUrl" url >

    Decorator Based Validation

    @url() adminWebsiteUrl: string;

    Sanitization

    1. blacklist
    2. ltrim
    3. rtrim
    4. toBoolean
    5. toDate
    6. toDouble
    7. toInt
    8. toString
    9. trim
    10. whitelist

    blacklist

    Remove the characters form the user entered value.

      @prop()
      @blacklist('abc' ) 
      freeText: string;

    ltrim

    Trim characters from the left-side of the input.

      @prop()
      @ltrim() 
      freeText: string;

    rtrim

    Trim characters from the right-side of the input.

      @prop()
      @rtrim() 
      freeText: string;

    toBoolean

    Convert the input to a boolean.

      @prop()
      @toBoolean() 
      Active: boolean;

    toDate

    Convert the input to a date, or null if the input is not a date.

      @prop()
      @toDate() 
      dob: Date;

    toDouble

    Convert the input to a float, or NAN if the input is not a float.

      @prop()
      @toDouble() 
      amount: number;

    toInt

    Convert the input to an integer, or NAN if the input is not an integer.

      @prop()
      @toInt() 
      amount: number;

    toString

    Convert the input to a string.

      @prop()
      @toString() 
      freeText: string;

    trim

    Trim characters from the input.

      @prop()
      @trim() 
      freeText: string;

    whitelist

    Remove characters that do not appear in the whitelist.

      @prop()
      @whitelist('abc' ) 
      freeText: string;

    Dynamic Validation

    Dynamic validation is used, when the validation rules will come from server side, means there is no static code on client side to manage the validation on reactive form. Scenario : First Name field should accepts alphabets and that is configured on server side. Below is the json for validation rule for firstName field. See the working code example on stackblitz

    dynamic-validation.json

    {
    "firstName":{
      "alpha":true
    }
    }

    First of all retrieve the validation rules from server and pass it to the group method.

    user-info.component.ts

    import { Component, OnInit } from '@angular/core';
    import { FormGroup } from "@angular/forms"
    import { HttpClient } from '@angular/common/http';
    import { RxFormBuilder, FormBuilderConfiguration } from '@rxweb/reactive-form-validators';
    
    
    @Component({
        selector: 'app-user-info-add',
        templateUrl: './user-info-add.component.html'
    })
    export class UserInfoAddComponent implements OnInit {
    
        userInfoFormGroup: FormGroup
    
        constructor(
            private formBuilder: RxFormBuilder,		private http: HttpClient
        ) { }
    
        ngOnInit() {
            this.http.get('assets/dynamic-validation.json').subscribe(                      (dynamicValidationConfiguration:any) => {
            
            this.userInfoFormGroup = this.formBuilder.group({
              firstName:['John']
            },
            new FormBuilderConfiguration( {dynamicValidation: dynamicValidationConfiguration}
                    ));
    })
        }
    }

    Conditional Validation

    Some fields are required based on some other fields value, like if the firstName field contains the value of 'John' then the lastName field is required. see the working code example on stackblitz

    import { Component, OnInit } from '@angular/core';
    import { FormGroup } from "@angular/forms"
    
    import { RxFormBuilder, RxwebValidators } from '@rxweb/reactive-form-validators';
    
    
    @Component({
        selector: 'app-user-info-add',
        templateUrl: './user-info-add.component.html'
    })
    export class UserInfoAddComponent implements OnInit {
    
        userInfoFormGroup: FormGroup
    
        constructor(
            private formBuilder: RxFormBuilder
        ) { }
    
        ngOnInit() {
            this.userInfoFormGroup = this.formBuilder.group({
              firstName:['',[RxwebValidators.required()]],
              lastName:['',[RxwebValidators.required({conditionalExpression:(x)=> x.firstName == 'John'})]]
            });
        }
    }
    

    Dirty Check

    Check the form is dirty or not. On component side you have to create a FormGroup object via RxFormBuilder, afterthat you can use isDirty method from FormGroup object. See the dirty code example on stackblitz

    <h3 class="bd-title" id="content">required Validator once for all properties</h3>
    <br/>
    <form [formGroup]="userInfoFormGroup">
    <div class="form-group">
        <label>First Name</label>
        <input type="text" formControlName="firstName" class="form-control"  />
        <small class="form-text text-danger" >{{userInfoFormGroup.controls.firstName.errorMessage}}<br/></small>
    </div>
    <div class="form-group">
        <label>Last Name</label>
        <input type="text" formControlName="lastName" class="form-control"  />
        <small class="form-text text-danger" >{{userInfoFormGroup.controls.lastName.errorMessage}}<br/></small>
        
    </div>
    <button [disabled]="!userInfoFormGroup.isDirty()" class="btn btn-primary">Submit</button>
    </form>

    Post as Form Data of Reactive Form value

    This provides a toFormData() method which converts the FormGroup value into the FormData. Here is an example of Post as FormData of Reactive Form value. See the working code example on stackblitz

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                firstName:[''], 
                lastName :[''],
                userName:[''],
                password : ['']
            });     
    	
         addUser(){
             let formdata = this.userFormGroup.toFormData()
           this.http.post(this.api, formdata); // This is fake uri, This is just for your reference.
          }

    Post Image through form Data

    To create fileObject from the input we have to set writeFile="true" attribute on the HTMLInputFileElement. Here is an example of Post Image through formData. See the working code example on stackblitz

    Reactive Form Validation

       this.userInfoFormGroup = this.formBuilder.group({
                profilePhoto:[''], 
            });
        
          addUser(){
             let formdata = (<FormGroupExtension>this.userInfoFormGroup).toFormData()
           this.http.post(this.api, formdata); // This is fake uri, This is just for your reference.      
          }
     <input type="file" [writeFile]="true" formControlName="profilePhoto" class="form-control" multiple />

    Reset Form

    RxFormBuilder provide a solution for reset form of angular reactive form object. If you want to reset the form as per the value initialized while creating an instance of the formControls, you can use resetForm()method of FormGroupExtension. See the working code example on stackblitz

    Reactive Form Validation

    this.userFormGroup = this.formBuilder.group({
        firstName:[''],
        lastName:[''],
        userName:[''],
        password:['']
            });
        
         resetForm(){
          (<FormGroupExtension>this.userFormGroup).resetForm();
          }

    Compare Password

    Compare validation is used to check whether the value of two formControls are same or not .Here is an example of comparing password. field. See the working code example on stackblitz

    Reactive Form Validation

     this.userFormGroup = this.formBuilder.group({
                password:['',], 
                confirmPassword:['', RxwebValidators.compare({fieldName:'password' })], 
            });

    Template Form Validation

    <input id="confirmPassword" name="confirmPassword" class="form-control"
             [(ngModel)]="user.confirmPassword" [compare]='{"fieldName":"password"}'] >

    Decorator Based Validation

    @compare({fieldName:'password'}) confirmPassword: string;

    Single Error Message

    You can a single default message for a formControl and display it in single errormessage without multiple conditions stackblitz

      <input type="text" formControlName="userName" class="form-control"  />
        {{userFormGroup.controls.userName["errorMessage"]}}

    In ReactiveFormConfig set the global validation message

          "validationMessage":{
        "required":"This field is required",
          "minLength":"minimum length is {{0}}",
          "maxLength":"allowed max length is {{0}}"
          }
        });
        
          this.userFormGroup = this.formBuilder.group({
         userName:['',[RxwebValidators.required(),RxwebValidators.minLength({value:5}),RxwebValidators.maxLength({value:10})]]
        })
    

    Upcoming Form Validations

    1. Masking.
    2. Phone/Mobile Number Masking.
    3. Countrywise Masking.
    4. Alphabet validation in other languages.
    5. AlphaNumeric validation in other languages.
    6. File Validation(size, extension, width and height validation).

    Goal

    1. Provides all type of client side validations.
    2. Easy implementation of complex and dynamic validation with less lines of code.
    3. Faster development for Advanced/Complex validation Forms.

    Contributing

    If you are thinking to make rxweb framework better, that's truly great. You can contribute from a single character to core architectural work or significant documentation – all with the goal of making a robust rxweb framework which helps for everyone in their projects. Even if you are don’t feel up to writing code or documentation yet, there are a variety of other ways that you can contribute like reporting issues to testing patches.

    Check out the docs on how you can put your precious efforts on the rxweb framework and contribute in the respective area.

    Need Help

    We highly recommend for help please ask your questions on our gitter/rxweb-project to get quick response from us. Otherthan our gitter channel you can ask your question on StackOverflow or create a new issue in our Github Repository.

    For, issue please refer our issue workflow wiki for better visibility our issue process.

    Feature Request

    You can request a new feature by submitting an issue to our GitHub Repository. If you would like to implement a new feature, please submit an issue with a proposal for your work first, to be sure that we can use it.

    License

    MIT

    Install

    npm i @rxweb/reactive-form-validators

    DownloadsWeekly Downloads

    12,541

    Version

    2.1.4

    License

    MIT

    Unpacked Size

    3.89 MB

    Total Files

    745

    Last publish

    Collaborators

    • ajayojha