当前位置: 首页 > news >正文

输入框仅支持英文、特殊符号、全角自动转半角 vue3

需求:封装一个输入框组件
1.只能输入英文。
2.输入的小写英文自动转大写。
3.输入的全角特殊符号自动转半角特殊字符

效果图在这里插入图片描述

代码

<script setup>
import { defineEmits, defineModel, defineProps } from "vue";
import { debounce } from "lodash";/*** 1.只能输入英文* 2.输入的小写英文自动转大写:使用 JavaScript 的 toUpperCase() 方法来转换。* 3.输入的全角特殊符号自动转半角特殊字符:这个也可以通过正则和替换的方式来处理* @type {EmitFn<(string)[]>}*/
const emits = defineEmits(["input", "blur"]);
const inputStyle = defineModel("inputStyle"); // 输入框自定义样式
const inputValue = defineModel();const props = defineProps({// 输入最大长度maxLength: {type: Number,default: 10000},// 是否禁用isDisabled: {type: Boolean,default: false},// 是否显示后缀isShowAppend: {type: Boolean,default: false}
});
// 提示语
const placeholderInput = defineModel("placeholderInput", {default: "请输入"
});// 处理输入的逻辑
const handleInput = debounce(val => {let newValue = val.trim();// 1. 允许中文符号和英文符号的输入// 这里我们允许常见的符号,如:·¥……()【】、;‘,。!@#$%^&*()_+{}|:"<>?~`.,;'\-=\[\]\\\/newValue = newValue.replace(/[^a-zA-Z·¥……()【】、;‘,。!@#$%^&*()_+{}|:"<>?~`.,;'\-=\[\]\\/!]/g,"");// 2. 小写字母自动转为大写newValue = newValue.toUpperCase();// 3. 全角字符转为半角字符newValue = newValue.replace(/[\uFF01-\uFF5E]/g, match =>String.fromCharCode(match.charCodeAt(0) - 0xfee0));// 4. 手动转换全角的【】为半角的[]newValue = newValue.replace(//g, "[").replace(//g, "]");inputValue.value = newValue; // 更新输入框的值emits("input", inputValue.value); // 发出 input 事件
}, 300);// 失去焦点事件
const onBlur = () => {emits("blur", inputValue.value);
};
</script><template><div class="custom_common_input"><el-inputv-model="inputValue"clearable:disabled="isDisabled":maxlength="maxLength":input-style="inputStyle":placeholder="placeholderInput"style="width: 100%"@input="handleInput"@blur="onBlur"><template v-if="isShowAppend" #append><slot name="append" /></template></el-input></div>
</template><style scoped lang="scss">
.custom_common_input {width: 100%;
}
</style>

使用方法

const value = ref("");<BasicInputEn v-model="value" />

最终效果

在这里插入图片描述

相关文章:

  • Sqlserver安全篇之_Sqlcmd命令使用windows域账号认证sqlserver遇到问题如何处理的案例
  • JVM考古现场(二十四):逆熵者·时间晶体的永恒之战
  • 乐视系列玩机---乐视1 x600系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 【AI News | 20250422】每日AI进展
  • Java 静态内部类面试题与高质量答案合集
  • 华为仓颉编程语言基础概述
  • 【漫话机器学习系列】215.处理高度不平衡数据策略(Strategies For Highly Imbalanced Classes)
  • 性能比拼: Redis vs Dragonfly
  • 服装印花/印烫环节计算机视觉应用设计方案
  • STL C++详解——priority_queue的使用和模拟实现 堆的使用
  • jenkins pipeline ssh协议报错处理
  • 【MCP Node.js SDK 全栈进阶指南】初级篇(4):MCP工具开发基础
  • 【MCP Node.js SDK 全栈进阶指南】初级篇(3):MCP资源开发基础
  • JavaScript ?? 运算符详解
  • 宏碁笔记本电脑怎样开启/关闭触摸板
  • 最新项目笔记
  • Qt Creator 创建 Qt Quick Application一些问题
  • C++:STL模板
  • 华为网路设备学习-19 路由策略
  • RS232转Profinet网关开启光谱仪新视界
  • 乍嘉苏改扩建项目迎来新进展!预应力管桩首件施工顺利完成
  • 洛阳白马寺存争议的狄仁杰墓挂牌,当地文物部门:已确认
  • 88岁罗马教皇方济各突然去世,遗嘱内容对外公布
  • 机器人马拉松背后的五大启示:未来社会与机器人的深度融合
  • 复旦大学史地学系在北碚
  • 中国政府援缅第七批抗震救灾物资运抵交付