繁体   English   中英

Java:检查电话号码是否符合有效格式

[英]Java: checking if a phone number fits a valid format

我正在尝试查找电话号码是否适合(xxx)xxx-xxxx格式,其中x是数字。 首先,我有用于长度和'(',')'和'-'的程序。 当我键入不起作用的内容时,将得到逻辑输出。 但是,当我输入格式正确的数字时,我的程序不会返回任何内容。

import java.util.Scanner;
public class Program04 {
public static void main(String args[])
{
    Scanner stdIn = new Scanner(System.in);
    String pN;

    System.out.print("Please enter a phone number (ddd)ddd-dddd :");
    pN = stdIn.nextLine();
    char a = pN.charAt(1); 
    char b = pN.charAt(2); 
    char c = pN.charAt(3); 
    char d = pN.charAt(5); 
    char e = pN.charAt(6); 
    char f = pN.charAt(7); 
    char g = pN.charAt(9); 
    char h = pN.charAt(10); 
    char i = pN.charAt(11); 
    char j = pN.charAt(12); 



    if (pN.length() == 13 && pN.charAt(0)=='(' && pN.charAt(4)== ')' && pN.charAt(8)=='-')
    {




        if (a>=0 && a<=9)
        {
            if (b>=0 && b<=9)
            {
                if (c>=0 && c<=9)
                {
                    if (d>=0 && d<=9)
                    {
                        if (e>=0 && e<=9)
                        {
                            if (f>=0 && f<=9)
                            {
                                if (g>=0 && g<=9)
                                {
                                    if (h>=0 && h<=9)
                                    {
                                        if (i>=0 && i<=9)
                                        {
                                            if (j>=0 && j<=9)
                                            {

                                                System.out.print("This is a valid phone number!");
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }


    }


    else System.out.println("Not a vaid phone number.");
}

}

使用模式匹配(regex)进行验证更容易:

...
pN = stdIn.nextLine();
System.out.println(pN.matches("\\(\\d{3}\\)\\d{3}-\\d{4}")); 

即使您想让它检查每个字符是否都是数字,也不可行使用太多嵌套的if。 而是定义一个应用检查的简单方法,例如:

private static boolean isDigit(char x) {
    return x>=0 && x<=9;
}

然后执行:

if ( isDigit(a) && isDigit(b) && ...) {
    return true;
}
else {
    return false;
}

如果您不允许使用RegEx或难以理解,请尝试通过循环内的简单switch简化嵌套的if,这样可读性更高,并且维护最简单

public static void main(String[] args) {

        String pn = scan.nextLine();
        boolean valid = true;

        if (pn.length() == 13){
            for (int i = 0 ; i < 13 ; i++){
                switch(i){
                case 0 : valid = pn.charAt(0) == '(';break;
                case 4 : valid = pn.charAt(4) == ')';break;
                case 8 : valid = pn.charAt(8) == '-';break;
                default : valid = Character.getNumericValue(pn.charAt(i)) >= 0 &&  Character.getNumericValue(pn.charAt(i))<= 9 ; break;
                }
                if (!valid) break;
            }
            if (!valid) System.out.println("Invalid number");
        }else{
            valid = false;
            System.out.println("Invalid length");
        }

        if (valid){
            System.out.println(pn + " is a valid telephone number");
        }
    }

另外,为避免使用char的ASCII值,请尝试使用Character.getNumericValue(Char c)方法。 像上面一样,它返回一个可用于测试的numeric

在这种情况下,最好使用正则表达式:

您可以使用以下命令:

String pattern = "(\\(\\d{3}\\)\\d{3}-\\d{4})";
Pattern r = Pattern.compile(pattern);
pN = stdIn.nextLine();
Matcher m = r.matcher(pN);
  if (m.find( )) {
     System.out.println("Found value: " + m.group(0) );
  } else {
     System.out.println("NO MATCH");
  } 

暂无
暂无

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

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