【问题标题】:java.util.regex Validating Phone numbersjava.util.regex 验证电话号码
【发布时间】:2014-04-26 17:02:02
【问题描述】:

我正在尝试验证用户输入的电话号码(在我的项目中)。这是我创建的尝试验证它的方法,还给了他们 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)。
  • 我会,但我不确定如何使用模式匹配字符串,我只见过它与布尔值一起使用,我不是 100% 知道如何做到这一点。
  • if(getPhoneInput(phone)){ send msg ok }else{ send msg not ok },您还可以返回一个包含错误的字符串,并使用它来显示您想要的任何内容。

标签: java regex validation


【解决方案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 语句已经导致循环退出,如果count 为2。
  2. 更改了您的正则表达式(将破折号移到括号外,去掉了?
  3. 添加了实际检查以查看字符串是否与模式匹配。
  4. Matcher m = p.matcher(input); 移至方法末尾,否则初始空输入将始终返回false
  5. inputString 是多余的。
  6. if 后面有一组额外的大括号,没有明显的用途。
  7. 添加了额外的验证步骤。

我还想指出,您可能不应该将此正则表达式用于任何实际应用程序,因为它仅验证一种非常具体的电话号码形式。

【讨论】:

  • 感谢您的全面改进。它确实满足了他们输入一些输入(没有空白字段)并返回消息直到达到计数 2 的需要。如果模式匹配器返回false,有没有办法让它做到这一点?假设他们输入格式 1234-123-123 我希望他们收到一条消息,通知他们格式错误,并给他们 2 次额外的尝试来完成它。我不确定如何使用布尔值来做到这一点。
  • 谢谢...这比我期待的要简单得多...不,我不打算将它用于现实世界的应用程序,我知道它会限制表单和类型可以输入的数字。再次感谢您看到它的布局,因为......不过我迷失在酱汁中。
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2011-09-05
  • 2015-09-08
相关资源
最近更新 更多