diff --git a/npm/ng-packs/packages/core/src/lib/validators/unique-character.validator.ts b/npm/ng-packs/packages/core/src/lib/validators/unique-character.validator.ts new file mode 100644 index 0000000000..509dc66c7f --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/validators/unique-character.validator.ts @@ -0,0 +1,20 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; +import { isNullOrEmpty } from '../utils'; + +export interface UniqueCharacterError { + uniqueCharacter: true; +} + +export function validateUniqueCharacter(): ValidatorFn { + return (control: AbstractControl): UniqueCharacterError | null => { + if (isNullOrEmpty(control.value)) return null; + + return isUnqiueCharacter(control.value) ? null : { uniqueCharacter: true }; + }; +} + +function isUnqiueCharacter(value: string): boolean { + const set = new Set(value.split('')); + + return set.size == value.length; +}