java.util.regex验证电话号码

时间:2014-04-26 17:02:03

标签: java regex validation

我正在尝试验证用户输入的电话号码(在我的项目中)。这是我创建的方法,试图验证它,并给他们3次尝试输入有效的格式。然而,我无法让它返回提示,告诉他们重新输入它只运行它的数字是真还是假。我哪里错了。

public static boolean getPhoneInput(String phone) {
int count =0;
String input,
inputString = phone;          
input = JOptionPane.showInputDialog( phone );
String pattern="(\\d-)?(\\d{3}-)?\\d{3}-\\d{4}";               
Pattern p = Pattern.compile(pattern);       
Matcher m = p.matcher(inputString);  
     while ((phone != null && input.length() == 0) && (count <2)){
         input = JOptionPane.showInputDialog("No input was detected \n" + phone);
         count++;}

     if (count==2){
            JOptionPane.showMessageDialog(null, " Sorry due to errors your order cannot be processed.  GOODBYE.");
            System.exit(0);      {           

      }
    }
    return false;} 

我尝试使用我找到的示例并为我的程序修改它。我不确定如果将字段留空或者格式无效,如何让布尔类型返回消息。

我能够使用getPhoneInput()方法让我的代码中的所有内容像魅力一样工作,但是有一种方法可以使用布尔值返回除true或false之外的其他内容。我明白这是它的构建,但是一旦我有正确的格式,我希望将数字写入txt文件。因为它现在工作,而不是记录用户名称的数字,它只是告诉我他们的电话号码符合所需的格式或它没有真或假。

1 个答案:

答案 0 :(得分:1)

我没有对此进行过彻底的测试,但它应该适合你:

public static boolean getPhoneInput(String displayText)
{
    int count = 0;
    String input;
    input = JOptionPane.showInputDialog(displayText);
    String pattern = "\\d-(\\d{3})-(\\d{3})-(\\d{4})";
    Pattern p = Pattern.compile(pattern);
    while ((displayText != null && input.length() == 0))
    {
        input = JOptionPane.showInputDialog("No input was detected \n" + displayText);
        count++;
        if (count == 2)
        {
            JOptionPane.showMessageDialog(null, " Sorry due to errors your order cannot be processed.  GOODBYE.");
            System.exit(0);
        }
    }
    count = 0;
    while (count <= 3)
    {
        count++;
        Matcher m = p.matcher(input);
        if (m.matches())
            return true;
        else
            input = JOptionPane.showInputDialog("Input in wrong format. \n" + displayText);
    }
    return false;
}

所做的更改:

  1. if语句移至while循环内,更改了while条件,如果if为2,count语句将导致循环退出
  2. 改变你的正则表达式(在parens之外移动破折号,摆脱?
  3. 添加了实际检查以查看字符串是否与模式匹配。
  4. Matcher m = p.matcher(input);移至方法的结尾,否则初始空输入将始终返回false
  5. inputString是多余的。
  6. if后面有一组额外的括号,没有任何明显的用途。
  7. 添加了额外的验证步骤。
  8. 我还想指出,您可能不应该将此正则表达式用于任何真实世界的应用程序,因为它只验证一种非常具体的电话号码形式。