Vue全局解決限制input輸入表情和特殊字符方案


背景:開發中遇到的表單輸入,往往會有對輸入內容的限制,比如不能輸入表情和特殊字符,只能輸入數字或字母等。

我們常規方法是在每一個表單的 on-change 事件上做處理。

 1 <template>
 2   <input type="text" v-model="note" @change="vaidateEmoji" />
 3 </template>
 4 
 5 <script> export default {
 6     methods: {
 7       vaidateEmoji() {
 8         var reg = /[^u4E00-u9FA5|d|a-zA-Z|rns,.?!,。?!…—&$=()-+/*{}[]]|s/g
 9         this.note = this.note.replace(reg, '')
10       },
11     },
12   } 
13 </script>

這樣代碼量比較大而且不好維護,所以我們需要自定義一個指令來解決這問題。

需求:根據正則表達式,設計自定義處理表單輸入規則的指令,下面以禁止輸入表情和特殊字符為例。

 1 let findEle = (parent, type) => {
 2   return parent.tagName.toLowerCase() === type ? parent : parent.querySelector(type)
 3 }
 4 
 5 const trigger = (el, type) => {
 6   const e = document.createEvent('HTMLEvents')
 7   e.initEvent(type, true, true)
 8   el.dispatchEvent(e)
 9 }
10 
11 const emoji = {
12   bind: function (el, binding, vnode) {
13     // 正則規則可根據需求自定義
14     var regRule = /[^u4E00-u9FA5|d|a-zA-Z|rns,.?!,。?!…—&$=()-+/*{}[]]|s/g
15     let $inp = findEle(el, 'input')
16     el.$inp = $inp
17     $inp.handle = function () {
18       let val = $inp.value
19       $inp.value = val.replace(regRule, '')
20 
21       trigger($inp, 'input')
22     }
23     $inp.addEventListener('keyup', $inp.handle)
24   },
25   unbind: function (el) {
26     el.$inp.removeEventListener('keyup', el.$inp.handle)
27   },
28 }
29 
30 export default emoji

使用:將需要校驗的輸入框加上 v-emoji 即可

 

 1 <template> 2 <input type="text" v-model="note" v-emoji /> 3 </template> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM