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

时间:2018-01-27 23:53:18

标签: java swing validation

我正在使用表单中的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");
    }

2 个答案:

答案 0 :(得分:2)

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

https://ideone.com/AyUEbA

#include <stdint.h>

extern int func(uint64_t[]);

static uint64_t arr[] = {
    0x00000024, 0x00201060,
    0x00201080, 0x00000000,
    0x00000008, 0x002010e0,
    0x002010a0, 0x00000000,
    0x00000032, 0x002010c0,
    ...
    0x00201100, 0x00000000
};


int main(int argc, char** argv) {
     func(arr);
     return 0;
}

答案 1 :(得分:1)

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