java电话号码验证

use*_*514 6 java regex validation

这是我的问题:

为给定字符串的电话号码创建一个构造函数,其形式为xxx-xxx-xxxx或xxx-xxxx,表示本地号码.如果格式无效,则抛出异常.

所以我想用正则表达式验证它,但我不知道我是否正确地做了.我还要扔什么样的例外?我需要创建自己的例外吗?

    public TelephoneNumber(String aString){
        if(isPhoneNumberValid(aString)==true){
            StringTokenizer tokens = new StringTokenizer("-");
            if(tokens.countTokens()==3){
                areaCode = Integer.parseInt(tokens.nextToken());
                exchangeCode = Integer.parseInt(tokens.nextToken());
                number = Integer.parseInt(tokens.nextToken());
            }
            else if(tokens.countTokens()==2){
                exchangeCode = Integer.parseInt(tokens.nextToken());
                number = Integer.parseInt(tokens.nextToken());
            }
            else{
                //throw an excemption here
            }
        }

    }


 public static boolean isPhoneNumberValid(String phoneNumber){
     boolean isValid = false;

     //Initialize reg ex for phone number.
    String expression = "(\\d{3})(\\[-])(\\d{4})$";
    CharSequence inputStr = phoneNumber;
    Pattern pattern = Pattern.compile(expression);
    Matcher matcher = pattern.matcher(inputStr);
    if(matcher.matches()){
        isValid = true;
     }
        return isValid;
    }
Run Code Online (Sandbox Code Playgroud)

对不起,是的,这是功课.对于此分配,唯一有效的格式是xxx-xxx-xxxx和xxx-xxxx,在这种情况下,所有其他格式(xxx)xxx-xxxx或xxxxxxxxxx均无效.

我想知道我的正则表达式是否正确

Bal*_*usC 7

所以我想用正则表达式验证它,但我不知道我是否正确地做了.

它确实看起来过于复杂.此外,匹配xxx-xxx-xxxx或数字xxx-xxxx在哪里x可以更好地完成"(\\d{3}-){1,2}\\d{4}".要了解有关正则表达式的更多信息,我建议您浏览http://regular-expressions.info.

我还要扔什么样的例外?我需要创建自己的例外吗?

A ValidatorException似乎很直截了当.

public static void isPhoneNumberValid(String phoneNumber) throws ValidatorException {
    if (!phoneNumber.matches(regex)) {
        throws ValidatorException("Invalid phone number");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你不想出于某些原因自己创建一个,那么我可能会选择IllegalArgumentException,但我仍然不建议这样做.

也就是说,此验证当然不包括国际和/或外部电话号码.除非这是真正的功课,否则我建议重新考虑验证.