v-angle // input框输入全角字符时触发该指令转化为半角字符

Vue.directive('angle', {
  inserted: function (el, binding, vnode) {
    el.children[0].value = binding.value
    let angleValue = el.children[0]
    // console.log(el)
    // console.log(binding)
    // console.log(vnode)
    // // vnode.data.model.callback(angleValue.value)
    // console.log(angleValue.value)
    el.addEventListener('keyup', function (e) {
      e = e || window.event
      // console.log(e)
      // // console.log(e.key)
      let str = angleValue.value
      let tmp = ''
      str = str.replace(/:/g, ':')
      str = str.replace(/。/g, '.')
      str = str.replace(/“/g, '"')
      str = str.replace(/”/g, '"')
      str = str.replace(/【/g, '[')
      str = str.replace(/】/g, ']')
      str = str.replace(/《/g, '<')
      str = str.replace(/》/g, '>')
      str = str.replace(/,/g, ',')
      str = str.replace(/?/g, '?')
      str = str.replace(/、/g, ',')
      str = str.replace(/;/g, ';')
      str = str.replace(/(/g, '(')
      str = str.replace(/)/g, ')')
      str = str.replace(/‘/g, "'")
      str = str.replace(/’/g, "'")
      str = str.replace(/『/g, '[')
      str = str.replace(/』/g, ']')
      str = str.replace(/「/g, '[')
      str = str.replace(/」/g, ']')
      str = str.replace(/﹃/g, '[')
      str = str.replace(/﹄/g, ']')
      str = str.replace(/〔/g, '{')
      str = str.replace(/〕/g, '}')
      str = str.replace(/—/g, '-')
      str = str.replace(/·/g, '.')
      /* 正则转换全角为半角 */
      for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) === 12288) {
          tmp += String.fromCharCode(str.charCodeAt(i) - 12256)
          continue
        }
        if (str.charCodeAt(i) > 65280 && str.charCodeAt(i) < 65375) {
          tmp += String.fromCharCode(str.charCodeAt(i) - 65248)
        } else {
          tmp += String.fromCharCode(str.charCodeAt(i))
        }
      }
      // console.log(angleValue.value)
      // console.log(binding)
      // console.log(vnode)
      vnode.data.model.callback(tmp)
    })
  }
})

使用

<el-input
    v-angle="value"
     v-model="value"/>
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐