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

时间:2014-05-08 14:44:51

标签: 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    0-9231665808
09231665808     09231665808

我有这种电话号码设置我想在阵列中分解这些数字,如:

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
)

我写了一些正则表达但不起作用。

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

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

3 个答案:

答案 0 :(得分:3)

为什么不更通用并保持简单?

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

这匹配所有示例“电话号码”并将字符串分解为数组。但是,如果您想验证与其他RegEx不同的数字。


实施例/试验:

<?php

$string = "+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";

if(preg_match_all('/\+?\d+[ -]?\d+/', $string, $matches))
{
    echo '<pre>';
    print_r($matches[0]);
    echo '</pre>';
}

?>

结果:

Array
(
    [0] => +91 9231665828
    [1] => +91 9231665828
    [2] => +91-9231675067
    [3] => +91-9231675067
    [4] => +919231665794
    [5] => +919231665794
    [6] => 91 9231675653
    [7] => 91 9231675653
    [8] => 91-9231675067
    [9] => 91-9231675067
    [10] => 919231665794
    [11] => 919231665794
    [12] => 0 9231675653
    [13] => 0 9231675653
    [14] => 0-9231665808
    [15] => 0-9231665808
    [16] => 09231665808
    [17] => 09231665808
)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我同意 tenub ,验证是一项单独的任务。但你确实需要确保引擎知道一个号码结束而另一个号码开始的位置:

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

编辑:我不知道重复数字的重要性,但是如果你只想要每一行的第一个,你可以在模式的开头抛出^

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