-1

我一直很难弄清楚这一点。

让我这样解释我的需求:

  1. 我正在制作一个 php 短信发件人脚本。

  2. 收件人电话号码将在文本区域内输入,以逗号分隔,例如:2348064356853,2347065478934,2348167456845,2347123454680

  3. 这些号码将是来自不同移动网络的电话号码的混合

  4. 不同的 API 将处理发送到不同电话组(移动网络)的短信(例如 API1,处理来自 NetworkA 和 NetworkB 的电话,而 API2 将处理 NetworkC 等)

  5. 我已经知道分配给各种电话网络的号码格式。

以下是所有可用网络的格式:

  • 所有电话号码,长度为 13 位,以 234 开头,
  • 每个电话号码的前 6 位数字标识一个网络
  • 所有网络都有超过 1 个唯一标识号

以下是分配给不同网络的编号:

  • 网络 A -234706, 234803, 234806, 234810, 234813, 234816 4235940,
  • 网络 B -234705, 234805, 234807, 234815,
  • 网络 C -234809, 234817, 234818, 234708
  • 网络 D -234802, 234808, 234812
  • 网络 E - `234702、234819、234709、234704、234707

我的挑战是如何将电话号码从这些不同的网络中分离出来,并将它们分组到单独的变量中。

拜托,我需要有人帮我解决这个问题。

4

3 回答 3

0

网络 A

/234(?:706|803|806|810|813|816)\d{7}/

网络 B

/234(?:705|805|807|815)\d{7}/

网络 C

/234(?:708|809|817|818)\d{7}/

网络 D

/234(?:802|808|812)\d{7}/

网络E

/234(?:702|704|707|709|819)\d{7}/

您可以使用preg_match_all上面的 per 表达式,并带有PREG_SET_ORDER选项,以便您的所有数字都整齐地放在一个数组中,$matches[0].

表达式可以是锚定的(^$),也可以使用边界或环视断言,但我不确定您的输入到底是什么。

于 2012-10-26T18:37:08.927 回答
0

1-单独的网络前缀,例如:

networks={
    "505 404 506 606",
    "236 848 488 993"
    etc
};

2- 获取一个数字是否有效,并将其分开: /234(\d{3})(\d{7})/gm这将组成 2 个组,一个带有前缀,另一个带有数字,因此您只需找到前缀并将数字发送到您找到的网络数组的索引上你的前缀。

编辑:演示

于 2012-10-26T18:41:23.570 回答
0

这是你的正则表达式(?P<NETA>234(?:706|803|806|810|813|816)\d{7})|(?P<NETB>234(?:705|805|807|815)\d{7})|(?P<NETC>234(?:809|817|818|708)\d{7})|(?P<NETD>234(?:802|808|812)\d{7})|(?P<NETE>234(?:702|819|709|704|707)\d{7})

这里有一些有用的代码,下次创建您自己的代码

<?php

    $networx = array(
        'A'     => array( 706, 803, 806, 810, 813, 816 ),
        'B'     => array( 705, 805, 807, 815 ),
        'C'     => array( 809, 817, 818, 708 ),
        'D'     => array( 802, 808, 812 ),
        'E'     => array( 702, 819, 709, 704, 707 )
    );


    $regex = '';

    foreach ( $networx as $k => $nums ) {
        $nums = implode( '|', $nums );
        $regex .= ( $regex ? '|' : '' ) . "(?P<NET{$k}>234(?:{$nums})\d{7})";
    }


    $text = "Network A - 2347061234567, 234803, 234806, 234810, 234813, 23481 6 4235940,

    Network B - 234705, 2348051234567, 234807, 2348151234567,

    Network C - 234809, 234817, 2348181234567, 234708

    Network D- 234802, 2348081234567, 234812

    Network E - 234702, 234819, 234709, 234704, 234707";

    preg_match_all( "/{$regex}/", $text, $matches );

?>

最终的 var$matches将包含诸如NETA, NETB, ...之类的键,NETE其中包含具有相应数字的数组。

[NETB] => Array
    (
        [0] => 
        [1] => 2348051234567
        [2] => 2348151234567
        [3] => 
        [4] => 
    )
于 2012-10-26T18:50:54.090 回答