2013-04-21 37 views
5

這是一個關於Java中RegEx的問題。我到處尋找,但找不到與我需要的任何東西類似的東西。此外,我花了幾個小時嘗試自己的。帶有括號的標準電話號碼的電話號碼正則表達式

我在用Java編碼的學校實驗室的最後部分。我使用Eclipse作爲我的編譯器。我建立了一個使用Swing組件的會員申請,

我的一個領域是讓用戶輸入10位數的電話號碼。 但是,我必須將其設置爲JFormatted文本字段,並使用以下格式掩蓋文本框:「(###)### - ####」。因此,當程序被加載,該文本框看起來像這樣:「(_) - ___」

現在,所有我需要做的是有一個正則表達式,將確保用戶在10數字。但是,我需要它使用上面使用的蒙版格式。這是我到目前爲止有:

pattern = Pattern.compile("\\d{3}\\s\\d{3}-\\d{4}"); 
    matcher = pattern.matcher(phoneText.getText()); 
    if (!matcher.find()) 
    { 
     phoneText.requestFocus(); 
     JOptionPane.showMessageDialog(null, "Phone entered incorrectly. Phone should be:\n" + 
       "10 numeric digits.", 
       "A D D E R R O R",JOptionPane.ERROR_MESSAGE); 
     return; 
    } 

我相信我有寫在那裏接受的空間和屏蔽格式破折號正則表達式,但我不知道如何包括括號。

編輯:每安德魯·托馬斯的提示正確的格式添加的問題:

什麼我需要添加到我的正則表達式來包括已在格式文本字段中括號?

編輯2:已回答的問題,但每個波希米亞人提示添加樣本,以便將來的學生誰遇到這篇文章可以利用它。對不起,我是新來的!

需要看起來像:

(123)456-7890

+0

*「這是對正則表達式Java中的問題」 *這可能是,但由於缺乏一個問題。你的問題是什麼? – 2013-04-21 08:00:46

+0

我想知道添加到我的regEx中包括已經在格式化文本字段中的括號。 – 2013-04-21 08:04:00

+0

什麼,恰恰必須正則表達式匹配?請列舉一些示例來說明您的意圖 – Bohemian 2013-04-21 08:04:25

回答

4

,你必須符合()(包圍前3位)

將其更改爲:

pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}"); 
          ^^^  ^^^ 

如您所見,我在()之前加了\\爲什麼

有些字符有特殊含義。由於正則表達式是Java中的字符串,因此您需要通過\\(它代表Java中的單個\)轉義它們。

雙反斜線轉義特殊字符來壓抑自己的特殊意義,它就像講:

「別拿(特殊字符,把它作爲常規字符(

+0

我甚至不確定這是他想要的:/ – Bohemian 2013-04-21 08:05:25

+4

他想匹配'「(###)### - ####」''其中'#'是數字。 – Maroun 2013-04-21 08:06:19

+0

嘿馬裏恩Maroun這正是我想要的非常感謝你。在打開和關閉括號之前,我沒有添加雙反斜槓。我覺得很荒謬。 – 2013-04-21 08:11:56

2

您可以使用\\(\\)使用括號,試試這個:

Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}"); 
+0

謝謝。這是我缺乏反斜槓,搞亂了我! – 2013-04-21 08:12:31