使用正则表达式和php分解数组中的电话号码

使用正则表达式和php分解数组中的电话号码,php,regex,Php,Regex,我设置了这种电话号码,我想将这些号码分解成如下数组: +91 9231665828 +91 9231665828 +91-9231675067 +91-9231675067 +919231665794 +919231665794 91 9231675653 91 9231675653 91-9231675067 91-9231675067 919231665794 919231665794 0 9231675653 0 9231675653 0-9231665808

我设置了这种电话号码,我想将这些号码分解成如下数组:

+91 9231665828  +91 9231665828
+91-9231675067  +91-9231675067
+919231665794   +919231665794
91 9231675653   91 9231675653
91-9231675067   91-9231675067
919231665794    919231665794
0 9231675653    0 9231675653
0-9231665808    0-9231665808
09231665808     09231665808
我写了一些正则表达式,但不起作用

/\n |\s(?=(\+91(?:-|\s |)91(?:-|\s |)0(?:-|\s |))?[7-9][0-9]{9}$/


我想要正确的正则表达式。

为什么不更一般一些,保持简单呢

Array
(
    [0] => +91 9231665828
    [1] => +91-9231675067
    [2] => +919231665794
    [3] => 91 9231675653
    [4] => 91-9231675067
    [5] => 919231665794
    [6] => 0 9231675653
    [7] => 0-9231665808
    [8] => 09231665808
    [9] => +91 9231665828
    [10] => +91-9231675067
    [11] => +919231665794
    [12] => 91 9231675653
    [13] => 91-9231675067
    [14] => 919231665794
    [15] => 0 9231675653
    [16] => 0-9231665808
    [17] => 09231665808
)
这将匹配所有示例“电话号码”,并将字符串拆分为一个数组。但是,如果您想验证这些数字,那么这是一个不同的正则表达式


示例/测试:

\+?\d+[ -]?\d+

为什么不更笼统一点,简单一点呢

Array
(
    [0] => +91 9231665828
    [1] => +91-9231675067
    [2] => +919231665794
    [3] => 91 9231675653
    [4] => 91-9231675067
    [5] => 919231665794
    [6] => 0 9231675653
    [7] => 0-9231665808
    [8] => 09231665808
    [9] => +91 9231665828
    [10] => +91-9231675067
    [11] => +919231665794
    [12] => 91 9231675653
    [13] => 91-9231675067
    [14] => 919231665794
    [15] => 0 9231675653
    [16] => 0-9231665808
    [17] => 09231665808
)
这将匹配所有示例“电话号码”,并将字符串拆分为一个数组。但是,如果您想验证这些数字,那么这是一个不同的正则表达式


示例/测试:

\+?\d+[ -]?\d+
使用此模式
^(\+?\d+[-]?\d+)
注意锚定
^

使用此模式
^(\+?\d+[-]?\d+)
注意锚定
^


我同意tenub验证是一项单独的任务。但您确实需要确保引擎知道一个数字的结束和另一个数字的开始:

\+?\b\d{1,2}[ -]?\d{9,10}\b
编辑:我不知道重复数字的意义,但是如果您只想要每行的第一个数字,您可以在模式的开头抛出一个
^

^\+?\b\d{1,2}[ -]?\d{9,10}\b

我同意tenub的观点,验证是一项单独的任务。但您确实需要确保引擎知道一个数字的结束和另一个数字的开始:

\+?\b\d{1,2}[ -]?\d{9,10}\b
编辑:我不知道重复数字的意义,但是如果您只想要每行的第一个数字,您可以在模式的开头抛出一个
^

^\+?\b\d{1,2}[ -]?\d{9,10}\b

是的,它能找到号码。谢谢,但当尝试拆分时,会留下剩余的空间。不要
preg\u split
。只需将
preg\u match\u all
放入
$matches
数组中即可。是的,它可以找到数字。谢谢,但当尝试拆分时,会留下剩余的空间。不要
preg\u split
。只需使用
preg\u match\u all
进入
$matches
数组。我需要所有数字。不仅是第一个。@AvikarshaSaha-那么这应该对你有用。如果您只得到一个号码,请使用
g
标志。我需要所有号码。不仅是第一个。@AvikarshaSaha-那么这应该对你有用。如果您只返回一个数字,请使用
g
标志。为什么每行有两个数字?如果它们总是一样的,你可以把整行读成一个字符串,然后只看该字符串的前半部分。类似于
firstHalf=wholeLine.substring(0,firstHalf.length/2)
(sry表示类似java的伪代码)的内容不可能总是相同的,可以是多列数字为什么每行有两个数字?如果它们总是一样的,你可以把整行读成一个字符串,然后只看该字符串的前半部分。类似于
firstHalf=wholeLine.substring(0,firstHalf.length/2)
(sry表示类似java的伪代码)的内容不可能总是相同的,可以是多列数字