Namespaced Validators
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | namespace Validation { export interface StringValidator { isAcceptable(s: string): boolean; } const lettersRegexp = /^[A-Za-z]+$/; const numberRegexp = /^[0-9]+$/; export class LettersOnlyValidator implements StringValidator { isAcceptable(s: string) { return lettersRegexp.test(s); } } export class ZipCodeValidator implements StringValidator { isAcceptable(s: string) { return s.length === 5 && numberRegexp.test(s); } } } // Some samples to try let strings = [ "Hello" , "98052" , "101" ]; // Validators to use let validators: { [s: string]: Validation.StringValidator; } = {}; validators[ "ZIP code" ] = new Validation.ZipCodeValidator(); validators[ "Letters only" ] = new Validation.LettersOnlyValidator(); // Show whether each string passed each validator for (let s of strings) { for ( var name in validators) { console.log(` "${ s }" - ${ validators[name].isAcceptable(s) ? "matches" : "does not match" } ${ name }`); } } |
Please login to continue.