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;
    }

我相信我已将正则表达式写入它接受掩码格式中的空格和破折号的位置,但我不知道如何包含括号。

编辑:根据 Andrew Thomas 的提示以正确的格式添加问题:

我需要在我的正则表达式中添加什么以包含已在格式化文本字段中的括号?

编辑2:问题已回答,但根据波西米亚提示添加示例,以便将来遇到此帖子的学生可以使用它。对不起,我是新手!

需要看起来像:

(123) 456-7890

4

3 回答 3

4

您必须匹配()(围绕前 3 位数字)

将其更改为:

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

如您所见,我\\在之前添加了()为什么

有些字符有特殊含义。并且由于正则表达式是 Java 中的字符串,因此您需要将它们转义\\(在 Java 中表示单个\)。

双反斜杠转义特殊字符以抑制其特殊含义,就像告诉:

“不要(当作特殊字符,当作普通字符(

于 2013-04-21T08:03:36.153 回答
2

您可以使用\\(\\)使用括号,试试这个:

Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");
于 2013-04-21T08:05:00.710 回答
0

这是一个快速的解决方案,当您需要在文本字段/电话号码字段中添加括号时,请注意这不是正则表达式,它基于 jquery

http://ashfaqahmed.net/jquery-add-prefix-postfix-on-phone-number-field/

于 2014-02-28T09:29:36.950 回答