2016-11-11 67 views
2

我有這個字符串:有效的正則表達式?

+1(333)456-7890

我想用正則表達式匹配。這是我現在有我的正則表達式:

Pattern p1 = Pattern.compile("((\\+{0,}[0-9]{0,3}(|-)?)?)(\\(?[0-9]  
{3}\\)?|[0-9]{3}(|-)?)([0-9]{3}(|-)?)([0-9]{4}|[a-zA-Z0-9]{7})"); 

它應該認識到,在中間潛力破折號或空格的任何電話號碼模式,這可能是至少10個數字(或字母),沒有國家代碼和最多13位數的國家代碼。

我的模式似乎與某些情況相匹配,而不是像前面所述的那樣。我真的很難過,任何幫助將不勝感激。

+0

這是在Java嗎?你應該谷歌,「在線視覺java正則表達式測試」或類似的東西。大量的在線工具可以幫助解決這個問題。 – lurker

+0

不是真的我在問什麼但感謝 – SJackson193

+0

我想看看是否有人可以看看它,並給出一些見解,爲什麼它不起作用 – SJackson193

回答

2

你的正則表達式似乎過於複雜,這就是爲什麼它可能會在某處出現問題。我試圖遵循它,但最終它來閱讀你的定義,並從頭開始建立一個新的更容易:

(\+\d{1,3}[- ]*)?(\(?\d\d\d\)?)[- ]*(\d\d\d[- ]?\d\d\d\d|[a-zA-Z0-9]{7}) 

這符合下面的測試情況:

+1(333)456 -7890

+ 1-(212)555-0198

+1 212 555-0198

1 212-ILOVEUU

根據您自己的測試用例,這可能就足夠了。或不。

(\+\d{1,3}[- ]*)?  // Optional +xxx international prefix plus dash/space 
(\(?\d\d\d\)?)[- ]* // three-digit area code with optional parens 
(\d\d\d[- ]?\d\d\d\d| // Either 7 digits, with optional dash 
[a-zA-Z0-9]{7})  // or 7 letters/digits 
+0

@ SJackson193'你的正則表達式看起來過於複雜......我試圖按照... '這是一個很大的信號,正則表達式在這裏可能不是正確的工具。 –

+1

並非總是如此。初學者與正則表達式通常很擅長製作笨重的怪物...... :-)並不總是工具的缺點。 OP在他的正規表現中顯示他並不真正瞭解他在做什麼。 – dda