JavaScript如何在提交输入值到数组前将其转为首字母大写其余小写
实现步骤
- 首先封装一个名称格式化函数,实现「首字母大写、其余字母小写」的规则,同时兼容你正则中包含的波兰语特殊字符
- 输入值先做格式化处理,再用格式化后的结果做重复校验、存入数组,彻底规避大小写不同导致的重复录入问题
工具函数封装
单单词名称格式化(适用普通场景)
输入jOHN输出John,输入żANNA输出Żanna,兼容特殊字符转换:
function formatName(name) { const trimmed = name.trim(); if (!trimmed) return ''; // 用toLocaleXXX方法保证波兰语特殊字符大小写转换正确 return trimmed[0].toLocaleUpperCase() + trimmed.slice(1).toLocaleLowerCase(); }
多单词名称格式化(支持空格分隔的名称)
输入aDaM kOWalski输出Adam Kowalski,自动过滤连续空格:
function formatName(name) { return name.trim() .split(' ') .filter(word => word) .map(word => word[0].toLocaleUpperCase() + word.slice(1).toLocaleLowerCase()) .join(' '); }
修改后的完整业务代码
const nameInput = document.getElementById('inputName'); let nameListDisplay = document.getElementById('nameListDisplay'); let assignmentDisplay = document.getElementById('assignmentDisplay'); // 正则转为RegExp对象,匹配效率更高 const onlyLetters = /^[a-zżźćńłśąęóA-ZŻŹĆŃŁŚĄĘÓ ]+$/; let namesList = []; function addName() { const rawInput = nameInput.value; const formattedName = formatName(rawInput); // 先校验格式化后的内容合法性 if (formattedName.match(onlyLetters)) { // 用格式化后的名称做重复校验,避免大小写不同导致的漏判 if (namesList.includes(formattedName)) { console.log('error:名称已存在'); } else { console.log('name added'); // 直接存入格式化后的标准名称 namesList.push(formattedName); nameInput.value = ''; displayNames(); } } else { console.log('error:输入包含非法字符'); } };
内容的提问来源于stack exchange,提问作者BadControl Hypnos
相关产品推荐
相关产品推荐

