繁体   English   中英

java电话号码验证

[英]java phone number 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;
    }

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

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

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

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

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

ValidatorException似乎很简单。

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

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

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

^(([(]?(\d{2,4})[)]?)|(\d{2,4})|([+1-9]+\d{1,2}))?[-\s]?(\d{2,3})?[-\s]?((\d{7,8})|(\d{3,4}[-\s]\d{3,4}))$

匹配:(0060)123-12345678,(0060)12312345678,(832)123-1234567,(006)03-12345678,

(006)03-12345678,00603-12345678,0060312345678

0000-123-12345678,0000-12-12345678,0000-1212345678 ......等

1234-5678,01-123-4567

可以用SPACE替换' - ',即(0080)123 12345678

也符合+ 82-123-1234567,+ 82 123 1234567,+ 800 01 12345678等。

更多关于家庭/私人号码。 不适用于1-800-000-0000类型的号码

*使用Regex测试仪进行测试http://regexpal.com/

您可以像BalusC建议的那样轻松匹配这些模式。

作为旁注, StringTokenizer已被弃用。 来自JavaDoc

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。 建议任何寻求此功能的人都使用String的split方法或java.util.regex包。

将字符串拆分为适当段的更简单方法是:

String phoneParts[] = phoneNumber.split("-");

String pincode =“589877”;

    Pattern pattern = Pattern.compile("\\d{6}");

\\ d表示数字。 在大括号内,Matcher matcher = pattern.matcher(pincode)的位数;

    if (matcher.matches()) {
        System.out.println("Pincode is Valid");
        return true;
    } else {
        System.out.println("pincode must be a 6 digit Number");

暂无
暂无

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

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