2014-09-22 106 views
0

我嘗試了許多次,使用preg_match_all獲取一些電話號碼。preg_match_all獲取電話號碼的模式

我想的事,沒有問題是這些結構:

09123456789 
+989123456789 
989123456789 
0912 345 6789 
+98 912 345 6789 

如何使用preg_match_all找到頂級的數字?

他們可能有空間或沒有。

他們都與+98 OR 98對於國家代碼可能啓動,

然後電話號碼必須與9 OR 0開始。

我已經試過這樣的:(但它並不適用於所有的工作)

/[+989][09]*([0-9]{9,})/i 
+0

你想找到與啓動數'0'? – 2014-09-22 12:48:25

+0

@AvinashRaj不,它可能以9或0開頭 – Pafo 2014-09-22 12:49:40

+0

'然後電話號碼必須以9'開頭? 請添加一些樣本字符串,應該匹配您的圖案,也不應該匹配您的圖案 – 2014-09-22 12:50:30

回答

1

我想你想要的東西像這樣,

(?:\+?98|0)(?:\s*\d{3}){2}\s*\d{4} 

DEMO

<?php 
$str = <<<EOT 
09123456789 
+989123456789 
989123456789 
0912 345 6789 
+98 912 345 6789 
EOT; 
$regex = '~(?:\+?98|0)(?:\s*\d{3}){2}\s*\d{4}~'; 
preg_match_all($regex, $str, $matches); 
print_r($matches); 
?> 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => 09123456789 
      [1] => +989123456789 
      [2] => 989123456789 
      [3] => 0912 345 6789 
      [4] => +98 912 345 6789 
     ) 

) 
+0

這是php親愛的朋友,不是JavaScript,但謝謝。以上正則表達式的 – Pafo 2014-09-22 12:59:52

+1

將適用於php和js。 – 2014-09-22 13:01:06

+0

但我得到一個錯誤:未知的修飾符'('在行... – Pafo 2014-09-22 13:02:13

1

試試這個:

(((\+?98)?|0) ?9[\d ]+) 

觀看演示:http://regex101.com/r/rG6qE8/1

+0

謝謝,但問題是,它獲取一些垃圾郵件值,我如何設置長度必須超過5? – Pafo 2014-09-22 12:47:44

+1

您可以在末尾添加{5,},或者像{9}一樣將+替換爲您已有的。 – 2014-09-22 12:48:33

+1

@Pafo做了這項工作? – 2014-09-22 12:57:18