如何验证多种变体的电话号码输入?

时间:2017-02-22 08:21:55

标签: java

我的程序目前仅在连续十个数字和字符时验证电话号码,并在键入“退出”字样时关闭。但是,我想知道如果他们也被写成两者,我如何验证数字,例如,(123)456-7890和123-456-7890

import java.util.Scanner;
public class Q2
{ 
    public static void main(String[] args){
    Scanner kb=new Scanner(System.in);
    while (true){
        System.out.print("Enter your phone number: ");
        String number=kb.next();
        if(number.equals("exit")){
            System.exit(0);
        }
    boolean valid=true;
    for(int i=0;i<number.length();i++){
        if(number.length()!=10) valid=false;
    }
    if (valid) System.out.println("It is valid");
    else System.out.println("It is invalid");
    }
  }
}

2 个答案:

答案 0 :(得分:0)

您可以通过真实验证来实现这一目标。

含义:“验证”描述了根据规则集检查输入的过程。如果输入符合所有那些规则,则它是有效的;否则就不是。

所以,是的,检查长度是第一个简单的规则;但“长度是10”......结果证明这不是一个好规则。例如,“123456A90”的长度为10;但是无效。

你能做些什么(只是给你一些想法):

  • 使用正则表达式(或纯字符串解析)来确定您的输入字符串是否与某个模式匹配,如(nnn-nnnn-nnnn)
  • 简单地用“”替换所有“不需要的”字符,例如() - ;然后检查结果字符串的长度是否为10。

    因此,答案是:仔细查看您的输入并确定有效电话号码的共同属性。然后你开始编写代码来检查那些。

答案 1 :(得分:0)

为什么你根本不使用这样的正则表达式更强大:

public static void main(String[] args) {
    System.out.println("123-456-7890 is valid? " + valider("123-456-7890"));
    System.out.println("(123)456-7890 is valid? " + valider("(123)456-7890"));
}

private static boolean valider(String phoneNumber) {
    if (phoneNumber.matches("\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}")) {
        return true;
    } else return phoneNumber.matches("\\(\\d{3}\\)\\d{3}-\\d{4}");
}