JavaScript用户输入验证:如何将州全称与缩写视为等效值
解决方法:让全称与缩写等效,忽略大小写匹配
首先,你原来用单个字符串存储有效选项的方式不太好维护,也没法处理大小写和等效匹配的问题。我们可以通过标准化输入+分组/集合存储的方式来解决这个问题,具体步骤如下:
1. 重构有效选项的存储方式
推荐把同一地区的全称、缩写(以及其他可能的别名)放在一起,或者直接整理成一个包含所有有效小写形式的集合,这样后续检查更方便。
方式一:用集合存储所有有效小写形式(推荐,查找高效)
把所有有效字符串转成小写,存入Set结构,这样查找速度非常快:
// 包含所有有效选项的小写形式:全称+缩写 const VALID_STATE_SET = new Set([ 'queensland', 'qld', 'new south wales', 'nsw', 'victoria', 'vic', 'northern territory', 'nt', 'western australia', 'wa', 'south australia', 'sa', 'tasmania', 'tas', 'australian capital territory', 'act' ]);
方式二:用分组数组存储(便于维护别名)
如果以后需要给某个地区加更多别名,这种方式更直观:
const VALID_STATE_GROUPS = [ ['queensland', 'qld'], // 昆士兰州 ['new south wales', 'nsw'], // 新南威尔士州 ['victoria', 'vic'], // 维多利亚州 ['northern territory', 'nt'],// 北领地 ['western australia', 'wa'], // 西澳大利亚州 ['south australia', 'sa'], // 南澳大利亚州 ['tasmania', 'tas'], // 塔斯马尼亚州 ['australian capital territory', 'act'] // 首都领地 ];
2. 标准化用户输入
不管用户输入的是大写(QUEENSLAND)、首字母大写(Queensland)还是缩写(QLD),我们都把它转成小写+去除前后空格,统一格式后再检查:
function normalizeInput(input) { // 处理空输入、前后空格,转小写 return input ? input.trim().toLowerCase() : ''; }
3. 编写验证函数
根据你选择的存储方式,编写对应的验证逻辑:
对应集合方式的验证函数
function isValidState(input) { const normalized = normalizeInput(input); return VALID_STATE_SET.has(normalized); }
对应分组数组的验证函数
function isValidState(input) { const normalized = normalizeInput(input); // 检查输入是否存在于任意一个分组中 return VALID_STATE_GROUPS.some(group => group.includes(normalized)); }
4. 使用示例:循环验证用户输入
let userInput; do { userInput = prompt("请输入澳大利亚的州/领地名称或缩写(比如Queensland或QLD):"); if (!isValidState(userInput)) { alert("输入无效!请输入有效的州/领地名称或缩写,比如Queensland、QLD等。"); } } while (!isValidState(userInput)); console.log("输入有效,继续执行后续代码...");
这样处理后,用户输入QUEENSLAND、qld、Queensland都会被判定为有效,完美解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Quipp
相关产品推荐
相关产品推荐

