vue 智能粘贴:分开 省、市、区、详细地址、姓名、电话等信息

以下是一个在 Vue 项目中实现智能粘贴功能,将粘贴的内容分开提取省、市、区、详细地址、姓名和电话信息的示例代码:

<template>
  <div>
    <textarea v-model="pastedContent" @paste="onPaste"></textarea>
    <div>
      省:{{ province }}
    </div>
    <div>
      市:{{ city }}
    </div>
    <div>
      区:{{ district }}
    </div>
    <div>
      详细地址:{{ detailedAddress }}
    </div>
    <div>
      姓名:{{ name }}
    </div>
    <div>
      电话:{{ phone }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pastedContent: '',
      province: '',
      city: '',
      district: '',
      detailedAddress: '',
      name: '',
      phone: ''
    };
  },
  methods: {
    // 粘贴事件处理函数
    onPaste(event) {
      const clipboardData = event.clipboardData || window.clipboardData;
      const pastedText = clipboardData.getData('text');
      this.pastedContent = pastedText;
      this.extractInfo(pastedText);
    },
    extractInfo(inputString) {
      // 定义正则表达式来匹配地址部分
      const addressRegex = /([\u4e00-\u9fa5]+省[\u4e00-\u9fa5]+市[\u4e00-\u9fa5]+区[\u4e00-\u9fa5]+.*?)/;
      const addressMatch = inputString.match(addressRegex);
      let address = addressMatch? addressMatch[1] : null;
      if (address) {
        // 将地址拆分为省、市、区和详细地址
        const parts = address.split(/省|市|区/);
        this.province = parts[0];
        this.city = parts[1];
        this.district = parts[2];
        this.detailedAddress = parts[3];
      }

      // 定义正则表达式来匹配姓名(假设姓名为中文)
      const nameRegex = /([\u4e00-\u9fa5]+)/;
      const nameMatch = inputString.match(nameRegex);
      this.name = nameMatch? nameMatch[1] : null;

      // 定义正则表达式来匹配电话(假设是 11 位以 1 开头的数字)
      const phoneRegex = /(1\d{10})/;
      const phoneMatch = inputString.match(phoneRegex);
      this.phone = phoneMatch? phoneMatch[1] : null;
    }
  }
};
</script>

以下是对代码的详细注释:

HTML 部分

  • <textarea>:用于接收用户粘贴的内容,并绑定了v-model指令将输入内容与pastedContent数据属性关联起来。同时,监听了paste事件,触发onPaste方法。
  • 一系列<div>:用于展示提取出来的省、市、区、详细地址、姓名和电话信息。

JavaScript 部分

  • data函数:
    • pastedContent:用于存储用户粘贴的文本内容。
    • provincecitydistrictdetailedAddressnamephone:分别用于存储提取出来的省、市、区、详细地址、姓名和电话信息。
  • onPaste方法:
    • event.clipboardData || window.clipboardData:获取粘贴事件的剪贴板数据对象。
    • clipboardData.getData('text'):从剪贴板数据对象中获取文本内容。
    • 将获取到的粘贴文本赋值给pastedContent,并调用extractInfo方法进行信息提取。
  • extractInfo方法:
    • addressRegex:定义了一个正则表达式用于匹配包含省、市、区的地址部分。正则表达式使用中文字符范围[\u4e00-\u9fa5]来匹配中文的省、市、区名称以及后续的地址内容。
    • addressMatch:通过match方法尝试在输入字符串中匹配地址部分。如果有匹配结果,则将匹配到的地址赋值给address变量。
    • 如果address不为null,则将地址字符串按照 “省”“市”“区” 进行拆分,分别将拆分后的结果赋值给provincecitydistrictdetailedAddress
    • nameRegex:定义了一个正则表达式用于匹配中文姓名。
    • nameMatch:通过match方法尝试在输入字符串中匹配姓名部分。如果有匹配结果,则将匹配到的姓名赋值给name变量。
    • phoneRegex:定义了一个正则表达式用于匹配 11 位以 1 开头的电话号码。
    • phoneMatch:通过match方法尝试在输入字符串中匹配电话部分。如果有匹配结果,则将匹配到的电话号码赋值给phone变量。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值