收藏
回答

怎样识别字符串中的手机号,手机号高亮显示,并且可以点击这个手机号,拨打电话?

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

最后一次编辑于  11-04
回答关注问题邀请回答
收藏

4 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    11-04

    正则匹配留言,找出电手机号码,结合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

        })

    }

    最后在慢慢调整样式吧



    11-04
    赞同 2
    回复 7
    • 调侃
      调侃
      11-04
      我知道匹配字符串是不是手机号,但是从字符串中找到手机号,而且这个手机号还是可以点击的,我不知道怎么做啊
      11-04
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-04回复调侃
      看我上面的回答
      11-04
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-04回复调侃
      保证按留言顺序输出
      11-04
      回复
    • 调侃
      调侃
      11-04
      👍👍,,,多谢
      11-04
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      11-04回复调侃
      更简洁一点的,只需split
      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] })
          }
      11-04
      回复
    查看更多(2)
  • 卢霄霄
    卢霄霄
    11-04

    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>

    11-04
    赞同 1
    回复 3
    • 调侃
      调侃
      11-04
      哦,那这样的话,是不是就不能保持手机号在字符串原来的顺序了
      11-04
      回复
    • 卢霄霄
      卢霄霄
      11-04回复调侃
      还是原顺序哟。。。你再仔细想想
      11-04
      回复
    • 调侃
      调侃
      11-04
      👍👍多谢
      11-04
      回复
  • 爆竹声中一岁除
    爆竹声中一岁除
    11-04

    拨电话wx.makePhoneCall

    11-04
    赞同
    回复
  • 李聪
    李聪
    11-04

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

    11-04
    赞同
    回复 4
    • 调侃
      调侃
      11-04
      不太明白啊,能说的具体点吗
      11-04
      回复
    • 李聪
      李聪
      11-04
      11-04
      回复
    • 调侃
      调侃
      11-04回复李聪
      哦,那这样的话,是不是就不能保持字符串原来的顺序了,比如手机号字符串原来在中间,这样截取以后,就只能字符串和手机号分开显示了
      11-04
      回复
    • 调侃
      调侃
      11-04
      👍👍多谢
      11-04
      回复
问题标签