+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}$)/
我想要正确的正则表达式。
答案 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