Bird
Raised Fist0
Angularframework~5 mins

Custom validators in Angular - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a custom validator in Angular?
A custom validator is a function you write to check if a form control's value meets specific rules beyond built-in checks. It helps you create your own validation logic.
Click to reveal answer
beginner
How do you apply a custom validator to a form control in Angular?
You add the custom validator function to the control's validators array when creating the form control, usually inside FormBuilder or FormControl constructor.
Click to reveal answer
beginner
What should a custom validator function return if the control value is valid?
It should return null to indicate the value passed the validation.
Click to reveal answer
beginner
What does a custom validator return if the control value is invalid?
It returns an object with a key describing the error and a value with details, for example: { 'myError': true }.
Click to reveal answer
beginner
Why use custom validators instead of built-in validators?
Because sometimes your form needs special rules that Angular's built-in validators don't cover, like checking a username format or matching passwords.
Click to reveal answer
What does a custom validator function receive as input?
AA FormControl object
BA string value
CAn event object
DA boolean flag
What should a custom validator return if the control value is valid?
Afalse
Btrue
C{}
Dnull
How do you add a custom validator to a FormControl?
ACall it inside ngOnInit
BAdd it to the component's providers
CPass it as the second argument in FormControl constructor
DUse it in the template only
What is the purpose of the error object returned by a custom validator?
ATo describe what validation failed
BTo reset the form
CTo submit the form
DTo style the input
Which Angular module provides the tools to create reactive forms with custom validators?
AFormsModule
BReactiveFormsModule
CBrowserModule
DHttpClientModule
Explain how to create and use a custom validator in Angular reactive forms.
Think about the function signature and how Angular expects validators.
You got /5 concepts.
    Describe why and when you would create a custom validator instead of using built-in validators.
    Consider cases where built-in validators are not enough.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does a custom validator function in Angular return when the input is valid?
      easy
      A. an empty string
      B. true
      C. false
      D. null

      Solution

      1. Step 1: Understand Angular validator return values

        Angular custom validators return null when the input passes validation, meaning no errors.
      2. Step 2: Identify the valid return for no errors

        Returning null signals the form control is valid, while any object means invalid.
      3. Final Answer:

        null -> Option D
      4. Quick Check:

        Valid input returns null [OK]
      Hint: Valid inputs always return null from validators [OK]
      Common Mistakes:
      • Returning true or false instead of null or error object
      • Returning empty string instead of null
      • Confusing valid with invalid return values
      2. Which of the following is the correct signature for a synchronous custom validator function in Angular?
      easy
      A. function myValidator(event: Event): string
      B. function myValidator(control: AbstractControl): ValidationErrors | null
      C. function myValidator(control: FormGroup): void
      D. function myValidator(value: string): boolean

      Solution

      1. Step 1: Recall Angular validator function signature

        A synchronous custom validator takes an AbstractControl and returns ValidationErrors or null.
      2. Step 2: Match the correct function signature

        function myValidator(control: AbstractControl): ValidationErrors | null matches the required signature exactly, others do not fit Angular patterns.
      3. Final Answer:

        function myValidator(control: AbstractControl): ValidationErrors | null -> Option B
      4. Quick Check:

        Validator signature = function myValidator(control: AbstractControl): ValidationErrors | null [OK]
      Hint: Validator functions take AbstractControl and return errors or null [OK]
      Common Mistakes:
      • Using wrong parameter types like string or Event
      • Returning boolean instead of error object or null
      • Missing return type or returning void
      3. Given this custom validator code, what will be the validation result for input value 'abc123'?
      function alphaOnly(control: AbstractControl) {
        const valid = /^[a-zA-Z]+$/.test(control.value);
        return valid ? null : { alphaOnly: true };
      }
      medium
      A. { alphaOnly: true }
      B. true
      C. null
      D. false

      Solution

      1. Step 1: Analyze the regex test on input 'abc123'

        The regex /^[a-zA-Z]+$/ matches only letters. 'abc123' contains digits, so test returns false.
      2. Step 2: Determine validator return value

        Since test is false, the validator returns the error object { alphaOnly: true } indicating invalid input.
      3. Final Answer:

        { alphaOnly: true } -> Option A
      4. Quick Check:

        Input with digits fails alphaOnly validator [OK]
      Hint: Regex test false means return error object, not null [OK]
      Common Mistakes:
      • Assuming digits pass the regex
      • Confusing true/false return values
      • Expecting null for invalid input
      4. Identify the error in this custom validator code snippet:
      function minLengthFive(control: AbstractControl) {
        if (control.value.length < 5) {
          return { minLengthFive: true };
        }
      }
      medium
      A. Incorrect error object key name
      B. Missing return null for valid input
      C. Using control.value.length without checking null
      D. Validator should return boolean instead of object

      Solution

      1. Step 1: Check for runtime errors

        The code accesses control.value.length without checking if control.value is null or undefined, causing TypeError when value is null (common for new FormControls).
      2. Step 2: Angular validator best practice

        Always check if (control.value == null) return null; before accessing properties like length. Explicit return null; for valid cases is also recommended.
      3. Final Answer:

        Using control.value.length without checking null -> Option C
      4. Quick Check:

        control.value can be null causing crash [OK]
      Hint: Always check control.value != null before .length [OK]
      Common Mistakes:
      • Not checking control.value for null before .length
      • Returning undefined instead of null for valid input
      • Confusing error object keys with validator names
      5. You want to create a custom validator that checks if a password contains at least one uppercase letter, one lowercase letter, and one digit. Which of these validator implementations correctly applies this logic?
      hard
      A. function passwordValidator(control: AbstractControl) { const val = control.value || ''; const hasUpper = /[A-Z]/.test(val); const hasLower = /[a-z]/.test(val); const hasDigit = /\d/.test(val); return hasUpper && hasLower && hasDigit ? null : { passwordStrength: true }; }
      B. function passwordValidator(control: AbstractControl) { if (!control.value.match(/[A-Z]/) || !control.value.match(/[a-z]/) || !control.value.match(/[0-9]/)) { return null; } return { passwordStrength: true }; }
      C. function passwordValidator(control: AbstractControl) { const val = control.value; if (val.length < 8) return { passwordStrength: true }; return null; }
      D. function passwordValidator(control: AbstractControl) { const val = control.value; if (val.includes(' ')) return { passwordStrength: true }; return null; }

      Solution

      1. Step 1: Understand password requirements

        The password must have at least one uppercase, one lowercase, and one digit character.
      2. Step 2: Analyze each option's logic

        function passwordValidator(control: AbstractControl) { const val = control.value || ''; const hasUpper = /[A-Z]/.test(val); const hasLower = /[a-z]/.test(val); const hasDigit = /\d/.test(val); return hasUpper && hasLower && hasDigit ? null : { passwordStrength: true }; } correctly tests all three conditions and returns null if all pass, error object otherwise. function passwordValidator(control: AbstractControl) { if (!control.value.match(/[A-Z]/) || !control.value.match(/[a-z]/) || !control.value.match(/[0-9]/)) { return null; } return { passwordStrength: true }; } reverses logic, returning null on failure. The remaining options check unrelated conditions.
      3. Final Answer:

        function passwordValidator(control: AbstractControl) { const val = control.value || ''; const hasUpper = /[A-Z]/.test(val); const hasLower = /[a-z]/.test(val); const hasDigit = /\d/.test(val); return hasUpper && hasLower && hasDigit ? null : { passwordStrength: true }; } -> Option A
      4. Quick Check:

        All conditions true returns null, else error [OK]
      Hint: Return null only if all conditions are met, else error [OK]
      Common Mistakes:
      • Returning null on invalid input
      • Checking only length or spaces, not required chars
      • Mixing up logic conditions in if statements
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard