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 TextValidationRule { 19 isValid(text: string): boolean; 20} 21 22const alphabeticPattern = /^[A-Za-z]+$/; 23const numericPattern = /^[0-9]+$/; 24 25class AlphabeticalValidator implements TextValidationRule { 26 isValid(text: string) { 27 return alphabeticPattern.test(text); 28 } 29} 30 31class PostalCodeValidator implements TextValidationRule { 32 isValid(text: string) { 33 return text.length === 5 && numericPattern.test(text); 34 } 35} 36 37// Test cases 38const testInputs = ["Hello", "98052", "101"]; 39 40// Validation registry 41const validationRules: { [ruleName: string]: TextValidationRule } = {}; 42validationRules["Postal Code"] = new PostalCodeValidator(); 43validationRules["Alphabetical"] = new AlphabeticalValidator(); 44 45 46assert(validationRules["Alphabetical"].isValid(testInputs[0]), 'success'); 47assert(validationRules["Postal Code"].isValid(testInputs[1]), 'success'); 48