【问题标题】:Phone number validation with try/catch in Java在 Java 中使用 try/catch 进行电话号码验证
【发布时间】:2018-01-27 23:53:18
【问题描述】:

我正在编写一个程序,在表单中使用 java swing 来验证用户的输入。我想确保用户使用正则表达式输入有效的电话号码。代码必须使用 try/catch 块完成,而不是 if/else。我想知道我是否走在正确的轨道上。

String phone = phoneField.getText();
String regexStr = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$";

phoneDisplay.setText(phone);

try {
        // valid function goes here
        phone = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$";
    }
    catch {
        JOptionPane.showMessageDialog(null,"Please enter a valid phone number");
    }

【问题讨论】:

  • catch 块实际上必须捕获异常。你当前的代码不会抛出任何东西。
  • 那么如何添加异常呢?
  • 您的代码所做的只是将一个字符串分配给一个变量。在论坛/网络上搜索有关如何使用正则表达式的信息。像“java regex”这样的简单关键字应该可以帮助您入门。

标签: java swing validation


【解决方案1】:

IMO 你不应该使用异常来验证字段,无论如何看看这个非常简单的例子:

https://ideone.com/AyUEbA

    try{
        if(!isValid()){
            throw new IllegalArgumentException("unvalid");
        }

    }catch(IllegalArgumentException e){
        System.out.println(e.getMessage());
    }

【讨论】:

    【解决方案2】:

    我完全同意@Squla 的观点,在所描述的情况下最好不要引发异常,并且最好只使用条件来使用 JOptionPanel 显示消息。

    我想提供一个答案,在哪里可以更好地使用异常,这个想法是您可以拥有一个方法或实用程序类来验证应用程序中的数字,并在电话号码时引发异常无效。您可以引发任何异常,但最好创建自定义Exception,原因是您可以使用此自定义异常仅捕获电话错误并根据错误处理消息。

    class PhoneNotValidException extends RuntimeException {
        public PhoneNotValidException(String message) {
            super(message);
        }
    }
    
    public void validatePhoneNumber(String phone) {
        final String regexStr = "^(1\\-)?[0-9]{3}\\-?[0-9]{3}\\-?[0-9]{4}$";
        if (!Pattern.matches(regexStr, phone)) {
            throw new PhoneNotValidException(phone);
        }
    }
    

    您可以在应用程序的任何部分调用此方法,例如当家庭电话号码更改时。

    public void onHomePhoneChangeListener(ChangeEvent event) {
        String phone = "223-32-23";
        try {
            validatePhoneNumber(phone);
            //more code maybe update the database
        } catch(PhoneNotValidException pe) {
            JOptionPane.showMessageDialog(null,"Please enter a valid phone number");
        } catch(Exception ex) {
            System.err.println("Other error different that Phone not valid");
        } 
    }
    

    请注意,您使用特定的PhoneNotValidException 来处理与电话无效相关的错误,您可以以不同的方式处理任何其他错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 2011-02-03
      • 2018-03-23
      • 2018-07-25
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多