2012-08-23 36 views
-1

我有這樣一個至今用於驗證我的形式的電話號碼:簡單的修復正則表達式驗證

/^\s*\+?\s*([0-9]+\s*)+\s*(\((\+?[0-9]+\s*)+\))?\s*[0-9-\s]*[0-9]\s*$/

它適用於像這些數字:+021 (+12) 113-2145,但我需要添加一個擴展到它的結尾是這樣的:+021 (+12) 113-2145 x 123所以我怎麼能添加字符x和之後的數字?

x和數字之間的空格也應該是可選的,就像我上面的代碼一樣。

有什麼想法嗎?謝謝!

+0

看起來你很瞭解正則表達式。你爲什麼不在你的正則表達式中添加'x'和分機號碼? – LonelyWebCrawler

+0

我在很多方面嘗試過,但沒有工作,所以也許我錯過了一些東西:)需要一點幫助。謝謝! – Abude

+0

擴展是否可選? – LonelyWebCrawler

回答

2

首先,你可以用更短的更換\d[0-9]所有實例。 (小數位數)

然後,將其添加到原正則表達式:

(x\s*[\d]{3})? 

因此,這將是

/^\s*\+?\s*([\d]+\s*)+\s*(\((\+?[\d]+\s*)+\))?\s*[\d-\s]*[\d]\s*(x\s*[\d]{3})?$/ 

編輯:所做的擴展選項

編輯2:使用\d代替[0-9]

+0

也沒有工作:(格式應該是'+021(+12)113-2145 x 123'或者'+021(+12)113-2145 x123'或者'+021(+12)113-2145x 123'或者'+021(+12)113-2145x123'這樣,謝謝! – Abude

+0

它的工作原理: )非常感謝您的幫助 – Abude

+1

非常好!很高興爲您提供幫助。 – LonelyWebCrawler

1

嘗試:

/^\s*\+?\s*([0-9]+\s*)+\s*(\((\+?[0-9]+\s*)+\))?\s*[0-9-\s]*[0-9]\s*(x\s*[0-9]+)?$/; 

加了:(X \ S * [0-9] +)?; 編輯:

$pattern = '/^\s*\+?\s*([0-9]+\s*)+\s*(\((\+?[0-9]+\s*)+\))?\s*[0-9-\s]*[0-9]\s*(x\s*[0-9]+)?$/'; 
$subject = '+021 (+12) 113-2145 x 123'; 
if(preg_match($pattern, $subject)) 
    echo 'matched'; 
+0

不知道爲什麼,似乎是正確的:( – Abude

+0

謝謝你的幫助:) – Abude