繁体   English   中英

使用Java中的try / catch验证电话号码

[英]Phone number validation with try/catch in Java

我正在编写一个程序,使用表单中的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");
    }

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

https://ideone.com/AyUEbA

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

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

我完全同意@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来处理与手机相关的错误无效,您可以以不同的方式处理任何其他错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM