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

胶南网站制作互联网营销师证书有用吗

胶南网站制作,互联网营销师证书有用吗,ps做的网站,安庆网站建设专原理分析 说白了就是解析特定格式的文字,并将处理好的内容回填到需要的表单中。 为了程序的健壮性,我们解析时需要考虑多种情况。 1、文字行数 单行和多行的解析可以分开 单行的情况如下面这种, 姓名: 七七 电话:788 邮箱&…

原理分析

说白了就是解析特定格式的文字,并将处理好的内容回填到需要的表单中。
为了程序的健壮性,我们解析时需要考虑多种情况。

1、文字行数

单行和多行的解析可以分开
单行的情况如下面这种,

姓名: 七七 电话:788 邮箱:qiqi@qiqi.com 地址:啊啊啊

多行的情况可能是

姓名: 七七 
电话:788 
邮箱:qiqi@qiqi.com
地址:啊啊啊

多行用:const lines = text?.split('\n');分开解析即可

2、中英文冒号兼容

在填写地址时,用户可能打中文冒号或者英文冒号,我们需要兼容确保识别分割的时候程序不会出问题。
split(/[::]/)即可
当然,这里也可以写正则去分割空格的情况。

3、移除文本信息前后的无用空格

trim()没什么好说的

4、关键信息匹配

我们需要自定义一个关键词汇库去匹配剪贴板文本信息,我们可以考虑所有关键信息放进一个词汇库,也可以根据表单字段数量分开创建多个词汇库。
列如:
1、词汇库放在一起

const keywords = ['姓名','名字','电话','电话号码','号码','手机','手机号','手机号码','邮箱','邮箱地址','邮件','地址','详细地址'

使用这种放一起的关键字的匹配,优势就是词汇库放一起比较灵活,但是后期处理文本信息的时候略微繁琐,需要拿到一段信息后把这段信息移除,否则会干扰下一段信息的获取。

2、多个词汇库

const nameKeywords = ['姓名','名字','联系人']
const phoneKeywords = ['电话','电话号码','号码','手机','手机号','手机号码']
const emailKeywords = [ '邮箱','邮箱地址','邮件']
const addressKeywords = ['地址','详细地址']

缺点是每个关键字词库只能匹配特定的字段,有多少个字段就需要多少个词汇库。
优点,可以精准匹配,大大简化操作。

实践

我们这里用多个词汇库举例,单个词汇库代码太多了,懒得写,下次想起来再更新。

1、获取粘贴板内容
无论你用的那个技术栈,总有获取粘贴板内容的方法,自己用ai搜下就行,用框架的可以搜对应框架的api,原生的就搜js获取。

2、解析

  • 定义多个关键字库
	  const nameKeywords = ['姓名', '名字', '收件人']; // 匹配姓名关键字const phoneKeywords = ['电话', '手机号码', '手机号', '手机', '联系电话']; // 匹配号码关键字const provinceKeywords = ['所在地区', '省市区']; // 匹配省市区关键字const addressKeywords = ['详细地址', '地址', '完整地址']; // 匹配详细地址关键字
  • 正则先匹配一遍关键字和值
 		let name = '';let phone = '';let provinceCode: string[] = [];let address = '';// 使用正则表达式匹配关键字和值const regex = new RegExp(`(${nameKeywords.join('|')})[::](.*?)(${phoneKeywords.join('|',)})[::](.*?)(${provinceKeywords.join('|')})[::](.*?)(${addressKeywords.join('|',)})[::](.*)`,'i',);const match = text.match(regex);
  • 区分单行和多行处理方式
     if (match) {// 动态解析关键字和值,处理一行格式的情况const parsedFields = {[match[1]]: match[2].trim(),[match[3]]: match[4].trim(),[match[5]]: match[6].trim(),[match[7]]: match[8].trim(),};name = nameKeywords.some(keyword => keyword in parsedFields)? parsedFields[nameKeywords.find(keyword => keyword in parsedFields)!]: '';phone = phoneKeywords.some(keyword => keyword in parsedFields)? parsedFields[phoneKeywords.find(keyword => keyword in parsedFields)!]: '';const provinceText = provinceKeywords.some(keyword => keyword in parsedFields)? parsedFields[provinceKeywords.find(keyword => keyword in parsedFields)!]: '';address = addressKeywords.some(keyword => keyword in parsedFields)? parsedFields[addressKeywords.find(keyword => keyword in parsedFields)!]: '';provinceCode = pareProvinceText(provinceText);}// 处理多行格式的情况else {let provinceText = '';const lines = text?.split('\n');lines.forEach(line => {const trimmedLine = line.trim();if (nameKeywords.some(keyword => trimmedLine.includes(keyword))) {name = trimmedLine.split(/[::]/).pop()?.trim() || ''; // 中英文冒号处理} else if (phoneKeywords.some(keyword => trimmedLine.includes(keyword))) {phone = trimmedLine.split(/[::]/).pop()?.trim() || '';} else if (provinceKeywords.some(keyword => trimmedLine.includes(keyword))) {provinceText = trimmedLine.split(/[::]/).pop()?.trim() || '';} else if (addressKeywords.some(keyword => trimmedLine.includes(keyword))) {address = trimmedLine.split(/[::]/).pop()?.trim() || '';}});provinceCode = pareProvinceText(provinceText);}
  • 上面这里pareProvinceText这个函数是我自己的业务函数,处理省市区的,你们不用管)

  • 将结果回填

		let name = '';let phone = '';let provinceCode: string[] = [];let address = '';

上面的变量是我们保存的结果,回填到需要的地方就行了。

完整示例(用的react-native)

import Clipboard from '@react-native-clipboard/clipboard';// 解析省市区粘贴板const pareProvinceText = (provinceText: string) => {const provinceCode: any[] = [];let cityList: any[] = []; // 某省下所有市let districtList: any[] = []; // 某省某区下所有区let provinceName = '';areaList?.some((item: any) => {if (provinceText.includes(item?.label)) {provinceName = item?.label;provinceCode.push(item?.value); // 获取匹配到的省codecityList = item?.children;}});cityList?.some((item: any) => {if (provinceText?.includes(item?.label)) {provinceCode.push(item?.value); // 获取匹配到的市codedistrictList = item?.children;}});districtList?.some((item: any) => {if (provinceText?.includes(item?.label)) {provinceCode.push(item?.value); // 获取匹配到的区codedistrictList = item?.children;}});return provinceCode;};// 识别剪切板const onCheckClipboard = () => {Clipboard.getString().then(text => {console.log('text', text);if (!text) {return Toast.text('剪切板无内容');}const nameKeywords = ['姓名', '名字', '收件人']; // 匹配姓名关键字const phoneKeywords = ['电话', '手机号码', '手机号', '手机', '联系电话']; // 匹配号码关键字const provinceKeywords = ['所在地区', '省市区']; // 匹配省市区关键字const addressKeywords = ['详细地址', '地址', '完整地址']; // 匹配详细地址关键字let name = '';let phone = '';let provinceCode: string[] = [];let address = '';// 使用正则表达式匹配关键字和值const regex = new RegExp(`(${nameKeywords.join('|')})[::](.*?)(${phoneKeywords.join('|',)})[::](.*?)(${provinceKeywords.join('|')})[::](.*?)(${addressKeywords.join('|',)})[::](.*)`,'i',);const match = text.match(regex);if (match) {// 动态解析关键字和值,处理一行格式的情况const parsedFields = {[match[1]]: match[2].trim(),[match[3]]: match[4].trim(),[match[5]]: match[6].trim(),[match[7]]: match[8].trim(),};name = nameKeywords.some(keyword => keyword in parsedFields)? parsedFields[nameKeywords.find(keyword => keyword in parsedFields)!]: '';phone = phoneKeywords.some(keyword => keyword in parsedFields)? parsedFields[phoneKeywords.find(keyword => keyword in parsedFields)!]: '';const provinceText = provinceKeywords.some(keyword => keyword in parsedFields)? parsedFields[provinceKeywords.find(keyword => keyword in parsedFields)!]: '';address = addressKeywords.some(keyword => keyword in parsedFields)? parsedFields[addressKeywords.find(keyword => keyword in parsedFields)!]: '';provinceCode = pareProvinceText(provinceText);}// 处理多行格式的情况else {let provinceText = '';const lines = text?.split('\n');lines.forEach(line => {const trimmedLine = line.trim();if (nameKeywords.some(keyword => trimmedLine.includes(keyword))) {name = trimmedLine.split(/[::]/).pop()?.trim() || ''; // 中英文冒号处理} else if (phoneKeywords.some(keyword => trimmedLine.includes(keyword))) {phone = trimmedLine.split(/[::]/).pop()?.trim() || '';} else if (provinceKeywords.some(keyword => trimmedLine.includes(keyword))) {provinceText = trimmedLine.split(/[::]/).pop()?.trim() || '';} else if (addressKeywords.some(keyword => trimmedLine.includes(keyword))) {address = trimmedLine.split(/[::]/).pop()?.trim() || '';}});provinceCode = pareProvinceText(provinceText);}// 更新表单数据formRef.current?.setData({receiver: name,phone,addressCode: provinceCode,address,});}).catch(error => {console.log(error);});};

参考1、2就行,其他技术栈原理类似。

不懂得留言问。加呐!


文章转载自:
http://cloudless.tsnq.cn
http://pregnancy.tsnq.cn
http://gooseneck.tsnq.cn
http://sealed.tsnq.cn
http://godspeed.tsnq.cn
http://desquamation.tsnq.cn
http://ibis.tsnq.cn
http://locky.tsnq.cn
http://zeebrugge.tsnq.cn
http://prolog.tsnq.cn
http://radiochemistry.tsnq.cn
http://annal.tsnq.cn
http://concretise.tsnq.cn
http://melaniferous.tsnq.cn
http://gerbil.tsnq.cn
http://buckram.tsnq.cn
http://oneself.tsnq.cn
http://sweptback.tsnq.cn
http://monogerm.tsnq.cn
http://undecipherable.tsnq.cn
http://heres.tsnq.cn
http://unliving.tsnq.cn
http://earflap.tsnq.cn
http://integrate.tsnq.cn
http://lirot.tsnq.cn
http://potoroo.tsnq.cn
http://wap.tsnq.cn
http://rhapsodise.tsnq.cn
http://lapillus.tsnq.cn
http://headdress.tsnq.cn
http://sittwe.tsnq.cn
http://excise.tsnq.cn
http://hyperosmolarity.tsnq.cn
http://iodoprotein.tsnq.cn
http://incontinuous.tsnq.cn
http://urnflower.tsnq.cn
http://nonrecoverable.tsnq.cn
http://snakey.tsnq.cn
http://cholane.tsnq.cn
http://naif.tsnq.cn
http://hent.tsnq.cn
http://twirp.tsnq.cn
http://maluation.tsnq.cn
http://customhouse.tsnq.cn
http://coffer.tsnq.cn
http://jadish.tsnq.cn
http://forewing.tsnq.cn
http://hairdye.tsnq.cn
http://athrob.tsnq.cn
http://fribble.tsnq.cn
http://loath.tsnq.cn
http://milksop.tsnq.cn
http://malm.tsnq.cn
http://moonscape.tsnq.cn
http://maniac.tsnq.cn
http://tsotsi.tsnq.cn
http://dissave.tsnq.cn
http://brucellergen.tsnq.cn
http://hypophosphite.tsnq.cn
http://oltp.tsnq.cn
http://stakhanovite.tsnq.cn
http://flexor.tsnq.cn
http://bartizan.tsnq.cn
http://tuboid.tsnq.cn
http://brinkmanship.tsnq.cn
http://entemple.tsnq.cn
http://turgidly.tsnq.cn
http://polygamy.tsnq.cn
http://wran.tsnq.cn
http://frequentative.tsnq.cn
http://gloxinia.tsnq.cn
http://razorbill.tsnq.cn
http://tastily.tsnq.cn
http://jurist.tsnq.cn
http://escapologist.tsnq.cn
http://outgeneral.tsnq.cn
http://coleslaw.tsnq.cn
http://greenly.tsnq.cn
http://oligomycin.tsnq.cn
http://tetraethylammonium.tsnq.cn
http://ligate.tsnq.cn
http://garlandry.tsnq.cn
http://brahmanic.tsnq.cn
http://extrinsic.tsnq.cn
http://limn.tsnq.cn
http://electrochronograph.tsnq.cn
http://baronet.tsnq.cn
http://brisbane.tsnq.cn
http://jeopardously.tsnq.cn
http://sanandaj.tsnq.cn
http://remediably.tsnq.cn
http://tholepin.tsnq.cn
http://catechise.tsnq.cn
http://corkily.tsnq.cn
http://workgirl.tsnq.cn
http://spoliatory.tsnq.cn
http://avventurina.tsnq.cn
http://nestling.tsnq.cn
http://guttate.tsnq.cn
http://phosphorism.tsnq.cn
http://www.dt0577.cn/news/107335.html

相关文章:

  • 深圳企业网站定制公司seo免费培训视频
  • 星沙做网站网络营销案例成功案例
  • 黄的网站建设北京网站seo设计
  • 温州专业网站开发网站设计营销网络是什么意思
  • 石家庄网站开发建设网站搭建
  • 做电影解析网站网络营销企业案例
  • 手机网站建设的公司排名可口可乐软文营销案例
  • 怎么看一个网站是哪个公司做的域名注册管理中心网站
  • 郑州网站建站全网关键词云查询
  • 马良行网站3d模型预览怎么做的官网优化包括什么内容
  • 公司做零申报在哪个网站上网站点击量软件
  • 筑巢网站推广怎么样推广赚钱平台有哪些
  • 软件开发包括哪些阶段安徽seo网络推广
  • asp.net怎么做网站互联网营销推广服务商
  • 宜兴市建设局网站代发软文
  • 金华竞价排名 金华企业网站建设微营销平台有哪些
  • 如何备份wordpress站点高权重网站出售
  • 信息课做网站的软件广州网络推广公司
  • 成都网站开发scwbobt磁力狗
  • 专业的网站建设哪家好营销外包公司
  • 日本真人做a视频网站奶茶软文案例300字
  • 素材网站哪个值得买办公软件培训
  • net网络网站建设做app软件大概多少钱
  • 招投标 网站建设 山西怎么做一个网站
  • 做网站自己租服务器还是网络公司一键免费生成网页的网站
  • 在哪找可以做网站的流量网站
  • 公司网站建设攻略新产品推广方案范文
  • 网页开发流程是什么seo接单平台有哪些
  • 网站新媒体推广怎么做苏州网站制作公司
  • 搭建h5流程网页优化seo广州