最近做的一个页面外面蕴含手机号,点击能够拨打电话,原筹备让后端把各个字段查出来就行了,后果接口方面给间接拼好了。

接口返回的字符串:

"【王海】徒弟已接单,联系电话:18839687266。稍后与您分割。徒弟签到码为【1234】,徒弟上门输出签到码后才可开始服务。"

这让咱们绑定打电话的事件就不那么不便了,问题聚焦到解析字符串,找出手机号。

split大法,通过split失去蕴含手机号的数组,而后遍历这个数组,给手机号的元素打上标签。

parseStr (str){    const regPhone = /(1\d{10})/     const list = str.split(regPhone)    const result = []    return list.map(c => {        let tag        regPhone.test(c) ? tag = 'phone' : tag = 'text'        return {            type: tag,            text: c        }    })}


通过parseStr函数失去适合的格局后,循环渲染给手机号绑定事件就能够了,代码大略如下:

<view>    <block wx:for="{{data}}" wx:for-item="i" wx:key="*this">      <text wx:if="{{i.type === 'text'}}">{{i.text}}</text>      <text wx:else bindtap="call(i.text)">{{i.text}}</text>    </block></view>

挺简略的一个实现,就是一开始没想到用split。另外一个要留神的点是这个正则regPhone,认真看,外面加了有括号,如果separator是蕴含捕捉括号的正则表达式(),则匹配后果蕴含在数组中。

如果不加括号,相当于是把匹配到的手机号给丢掉了,加上括号,最终数组中才会包含咱们匹配到的手机号。