1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import assert = require('assert'); 17 18interface StringValidator { 19 isAcceptable(s: string): boolean; 20} 21 22let lettersRegexp = /^[A-Za-z]+$/; 23let numberRegexp = /^[0-9]+$/; 24 25class LettersOnlyValidator implements StringValidator { 26 isAcceptable(s: string) { 27 return lettersRegexp.test(s); 28 } 29} 30 31class ZipCodeValidator implements StringValidator { 32 isAcceptable(s: string) { 33 return s.length === 5 && numberRegexp.test(s); 34 } 35} 36 37// Some samples to try 38let strings = ["Hello", "98052", "101"]; 39 40// Validators to use 41let validators: { [s: string]: StringValidator; } = {}; 42validators["ZIP code"] = new ZipCodeValidator(); 43validators["Letters only"] = new LettersOnlyValidator(); 44 45 46assert(validators["Letters only"].isAcceptable(strings[0]), 'success'); 47assert(validators["ZIP code"].isAcceptable(strings[1]), 'success'); 48