Vue3 Form 表單限制輸入小寫字母、數字和下劃線

方案一:Element Plus 表單驗證

<template><el-form :model="form" :rules="rules" ref="formRef" label-width="120px"><el-form-item label="用戶名" prop="username"><el-input v-model="form.username" @input="handleUsernameInput"placeholder="只能輸入小寫字母、數字和下劃線"/></el-form-item><el-form-item><el-button type="primary" @click="submitForm">提交</el-button></el-form-item></el-form>
</template><script setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';const formRef = ref();
const form = ref({username: ''
});// 實時過濾非法字符
const handleUsernameInput = (value) => {form.value.username = value.replace(/[^a-z0-9_]/g, '');
};// 表單驗證規則
const rules = {username: [{ required: true, message: '用戶名不能為空', trigger: 'blur' },{ pattern: /^[a-z0-9_]+$/,message: '只能包含小寫字母、數字和下劃線',trigger: 'blur'},{ min: 4, max: 16, message: '長度應在4-16個字符之間', trigger: 'blur' }]
};const submitForm = () => {formRef.value.validate((valid) => {if (valid) {ElMessage.success('提交成功');console.log('表單數據:', form.value);} else {ElMessage.error('請檢查表單輸入');}});
};
</script>

方案二:自定義指令實現

<template><el-form :model="form" ref="formRef" label-width="120px"><el-form-item label="用戶名"><el-input v-model="form.username" v-lowercase-num-underscoreplaceholder="只能輸入小寫字母、數字和下劃線"/></el-form-item></el-form>
</template><script setup>
// 自定義指令
const vLowercaseNumUnderscore = {mounted(el) {el.addEventListener('input', (e) => {e.target.value = e.target.value.replace(/[^a-z0-9_]/g, '');// 觸發v-model更新e.dispatchEvent(new Event('input'));});}
};const form = ref({username: ''
});
</script>

方案三:組合式函數封裝

// useInputValidator.js
import { ref } from 'vue';export function useInputValidator() {const inputValue = ref('');const validateInput = (value) => {return /^[a-z0-9_]*$/.test(value);};const filterInput = (value) => {return value.replace(/[^a-z0-9_]/g, '');};return {inputValue,validateInput,filterInput};
}
<template><el-input v-model="filteredValue"placeholder="只能輸入小寫字母、數字和下劃線"/>
</template><script setup>
import { useInputValidator } from './useInputValidator';const { inputValue, filterInput } = useInputValidator();const filteredValue = computed({get: () => inputValue.value,set: (val) => {inputValue.value = filterInput(val);}
});
</script>

高級功能擴展

1. 添加輸入提示

<template><el-inputv-model="form.username"@input="handleUsernameInput"placeholder="只能輸入小寫字母、數字和下劃線"><template #append><el-tooltip content="只能包含a-z, 0-9和_" placement="top"><el-icon><QuestionFilled /></el-icon></el-tooltip></template></el-input>
</template>

2. 實時字符計數

<template><el-inputv-model="form.username"@input="handleUsernameInput"maxlength="16"show-word-limit/><div class="counter">已輸入: {{ form.username.length }}/16</div>
</template>

3. 禁止粘貼非法字符

const handlePaste = (e) => {e.preventDefault();const text = e.clipboardData.getData('text/plain');const filtered = text.replace(/[^a-z0-9_]/g, '');document.execCommand('insertText', false, filtered);
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906345.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

23、電網數據管理與智能分析 - 負載預測模擬 - /能源管理組件/grid-data-smart-analysis

76個工業組件庫示例匯總 電網數據管理與智能分析組件 1. 組件概述 本組件旨在模擬一個城市配電網的運行狀態&#xff0c;重點關注數據管理、可視化以及基于模擬數據的智能分析&#xff0c;特別是負載預測功能。用戶可以通過界面交互式地探索電網拓撲、查看節點狀態、控制時間…

單片機復用功能重映射Remap功能

目錄 一、查看“DS5319 stm32f10x中等密度mcu數據手冊&#xff08;英文&#xff09;”手冊 二、查看“RM0008 STM32F10xxx參考手冊&#xff08;中文&#xff09;”手冊 三、重映射&#xff08;Remap&#xff09;功能程序編寫 自己學習過程中容易遺忘的知識點&#xff0c;記錄…

鏈表面試題9之環形鏈表進階

那么上一題我們已經知道了雙指針的變法以及拓展的用法&#xff0c;那么這里我們直接難度升級。 想回去復習的這里放個鏈接&#xff1a;鏈表的面試題8之環形鏈表-CSDN博客 題目鏈接&#xff1a;142. 環形鏈表 II - 力扣&#xff08;LeetCode&#xff09; 我們來看這道題目主要…

游戲引擎學習第299天:改進排序鍵 第二部分

回顧并為當天內容做準備 我們會現場編寫完整的游戲代碼。回顧上周發現自己對游戲中正確的排序規則并沒有清晰的理解。主要原因是我們更擅長三維游戲開發&#xff0c;缺乏二維游戲和二維游戲技術的經驗&#xff0c;對于二維精靈排序、模擬三維效果的最佳方案等沒有太多技巧和經…

Redis從入門到實戰 - 高級篇(中)

一、多級緩存 1. 傳統緩存的問題 傳統的緩存策略一般是請求到達Tomcat后&#xff0c;先查詢Redis&#xff0c;如果未命中則查詢數據庫&#xff0c;存在下面的問題&#xff1a; 請求要經過Tomcat處理&#xff0c;Tomcat的性能成為整個系統的瓶頸Redis緩存失效時&#xff0c;會…

Python訓練營打卡 Day31

文件的規范拆分和寫法 今日的示例代碼包含2個部分 notebook文件夾內的ipynb文件&#xff0c;介紹下今天的思路項目文件夾中其他部分&#xff1a;拆分后的信貸項目&#xff0c;學習下如何拆分的&#xff0c;未來你看到的很多大項目都是類似的拆分方法 知識點回顧&#xff1a;文件…

2025年護網行動藍隊防御全解析:構建智能動態防御體系

2025年&#xff0c;隨著網絡攻擊手段的智能化、混合化升級&#xff0c;護網行動中的藍隊防御已從傳統的被動防護轉向“動態感知、智能研判、主動反制”的立體化模式。如何在攻防不對稱的對抗中實現“看得見、防得住、溯得清”&#xff1f;本文將結合前沿技術與實戰經驗&#xf…

React Contxt詳解

React Contxt詳解 React 的 Context API 是用于跨組件層級傳遞數據的解決方案&#xff0c;尤其適合解決「prop drilling」&#xff08;多層組件手動傳遞 props&#xff09;的問題。以下是關于 Context 的詳細解析&#xff1a; 文章目錄 React Contxt詳解一、Context 核心概念二…

使用 lock4j-redis-template-spring-boot-starter 實現 Redis 分布式鎖

在分布式系統中&#xff0c;多個服務實例可能同時訪問和修改共享資源&#xff0c;從而導致數據不一致的問題。為了解決這個問題&#xff0c;分布式鎖成為了關鍵技術之一。本文將介紹如何使用 lock4j-redis-template-spring-boot-starter 來實現 Redis 分布式鎖&#xff0c;從而…

Vue響應式系統演進與實現解析

一、Vue 2 響應式實現詳解 1. 核心代碼實現 // 依賴收集器&#xff08;觀察者模式&#xff09; class Dep {constructor() {this.subscribers new Set();}depend() {if (activeEffect) {this.subscribers.add(activeEffect);}}notify() {this.subscribers.forEach(effect &g…

Mujoco 學習系列(一)安裝與部署

這個系列文章用來記錄 Google DeepMind 發布的 Mujoco 仿真平臺的使用過程&#xff0c;Mujoco 是具身智能領域中非常知名的仿真平臺&#xff0c;以簡單易用的API和精準的物理引擎而著稱&#xff08;PS&#xff1a;原來Google能寫好API文檔啊&#xff09;&#xff0c;也是我平時…

Ai學習之openai api

一、什么是openai api 大家對特斯拉的馬斯克應該是不陌生的&#xff0c;openai 就是馬斯克投資的一家研究人工智能的公司&#xff0c;它就致力于推動人工智能技術的發展&#xff0c;目標是確保人工智能對人類有益&#xff0c;并實現安全且通用的人工智能。 此后&#xff0c;O…

leetcode 合并區間 java

用 ArrayList<int[]> merged new ArrayList<>();來定義數組的list將數組進行排序 Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));如果前面的末尾>后面的初始&#xff0c;那么新的currentInterval的末尾這兩個數組末尾的最大值&#xff0c;即…

std::vector<>.emplace_back

emplace_back() 詳解&#xff1a;C 就地構造的效率革命 emplace_back() 是 C11 引入的容器成員函數&#xff0c;用于在容器尾部就地構造&#xff08;而非拷貝或移動&#xff09;元素。這一特性顯著提升了復雜對象的插入效率&#xff0c;尤其適用于構造代價較高的類型。 一、核…

Dify實戰案例《AI面試官》更新,支持語音交互+智能知識庫+隨機題庫+敏感詞過濾等...

大模型應用課又更新了&#xff0c;除了之前已經完結的兩門課&#xff08;視頻圖文&#xff09;&#xff1a; 《Spring AI 從入門到精通》《LangChain4j 從入門到精通》 還有目前正在更新的 《Dify 從入門到實戰》 本周也迎來了一大波內容更新&#xff0c;其中就包括今天要介紹…

AGI大模型(29):LangChain Model模型

1 LangChain支持的模型有三大類 大語言模型(LLM) ,也叫Text Model,這些模型將文本字符串作為輸入,并返回文本字符串作為輸出。聊天模型(Chat Model),主要代表Open AI的ChatGPT系列模型。這些模型通常由語言模型支持,但它們的API更加結構化。具體來說,這些模型將聊天消…

動態IP技術在跨境電商中的創新應用與戰略價值解析

在全球化4.0時代&#xff0c;跨境電商正經歷從"流量紅利"向"技術紅利"的深度轉型。動態IP技術作為網絡基礎設施的關鍵組件&#xff0c;正在重塑跨境貿易的運營邏輯。本文將從技術架構、應用場景、創新實踐三個維度&#xff0c;揭示動態IP如何成為跨境電商突…

android雙屏之副屏待機顯示圖片

摘要&#xff1a;android原生有雙屏的機制&#xff0c;但需要芯片廠商適配框架后在底層實現。本文在基于芯發8766已實現底層適配的基礎上&#xff0c;僅針對上層Launcher部分對系統進行改造&#xff0c;從而實現在開機后副屏顯示一張待機圖片。 副屏布局 由于僅顯示一張圖片&…

STM32之中斷

一、提高程序實時性的架構方案 輪詢式 指的是在程序運行時&#xff0c;首先對所有的硬件進行初始化&#xff0c;然后在主程序中寫一個死循環&#xff0c;需要運行的功能按照順序進行執行&#xff0c;輪詢系統是一種簡單可靠的方式&#xff0c;一般適用于在只需要按照順序執行…

LLM應用開發平臺資料

課程和代碼資料 放下面了&#xff0c;自取&#xff1a; https://pan.quark.cn/s/57a9d22d61e9