怎样识别字符串中的手机号,手机号高亮显示,并且可以点击这个手机号,拨打电话?
发布于 7 年前 作者 ping25 7142 次浏览 来自 官方Issues

我们的需求是这样的》 客户留了一段备注信息,里面可能会有手机号(可能是多个号码),怎么才能识别出手机号,并且手机号要能高亮显示,当用户看到手机号的时候,直接点击手机号就可以拨打电话了,这样的功能App里面很好实现,但是小程序怎么实现呢。

4 回复

正则匹配留言,找出电手机号码,结合wx.makePhoneCall

// 下面这段比较繁琐

var a = ‘15900000001一二15900000002三四15900000003五六15900000004’, b = a.match(/(1\d{10})/g),c = a.split(/(?:1\d{10})/),list = []

for (var i in c){

    if (c[i] == ‘’) {

        i == 0 && list.push({ type: ‘phone’, val: b[0] })

    } else {

        list.push({ type: ‘text’, val: c[i] })

        list.push({ type: ‘phone’, val: b[i] })

    }

}

// ===================================

// 下面这段比较简洁一点

var a = ‘15900000001一二15900000002三四15900000003五六15900000004’, c = a.split(/(?:1\d{10})/),list = []

for (var i in c){

    var flag = c[i] != ‘’ && /^(1\d{10})$/.test(c[i])

    c[i] != ‘’ && list.push({ type: flag ? ‘phone’ : ‘text’, val: c[i] })

}

// ======================

this.setData({

    list: list

})

console.log(list)

==============================

<view wx:for="{{list}}" wx:key bindtap="{{item.type==‘phone’?‘makePhoneCall’:’’}}" data-phone="{{item.type==‘phone’?item.val:’’}}">{{item.val}}</view>

==============================

makePhoneCall: function (e) {

    wx.makePhoneCall({

        phoneNumber:e.currentTarget.dataset.phone

    })

}

最后在慢慢调整样式吧

拨电话wx.makePhoneCall

1、用正则表达式A匹配留言的字符串,取出手机号数组 phoneList

2、用split方法,加刚刚的正则表达式A,拆分留言成字符串数组 strList。

3、界面上用循环显示

<block wx:for="{{strList}}">

<text>{{item}}</text>

    <text bindtap=“call” data-phone="{{phoneList[index]}}" wx:if="{{phoneList[index]}}">{{phoneList[index]}}</text>

</block>

可以先处理字符串,大致分为文字(text)和 电话(tel),然后再循环渲染出来就可以

回到顶部