2013-04-21 524 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