Я пытаюсь проверить правильность формата номера телефона - PullRequest
0 голосов
/ 21 апреля 2020

Номера телефонов, которые я проверю, имеют два формата:

(555) 555-5555 и 555-555-5555

Однако в моем коде, приведенном ниже, условие условия if продолжает сбой. Я пытаюсь проверить, является ли str.charAt(0) ( или числом

public static boolean isPhoneNumber(String str) {
    if (str.contains("-")) {
      for (int i = 0; i < str.length(); i++) {
        if ((i == 0 && str.charAt(0) != '(')
            || (i == 0 && Character.isDigit(str.charAt(0)) == false)) {
          System.out.println(Character.isDigit(str.charAt(0)));
          return false;
        }

        if (i == 4 && str.charAt(4) != ')' || i == 4 && !(Character.isDigit(str.charAt(4)))) {
          System.out.println("here2");
          return false;
        }

        if (i == 3 && str.charAt(3) != '-'
            || i == 3 && (Character.isDigit(str.charAt(3)) == false)) {
          System.out.println(str.charAt(3));
          return false;
        }

        if (i == 5 && str.charAt(5) != ' ' || i == 5 && !(Character.isDigit(str.charAt(5)))) {
          System.out.println("here4");
          return false;
        }

        if (i == 7 && str.charAt(i) != '-' || i == 7 && !(Character.isDigit(str.charAt(i)))) {
          System.out.println("here5");
          return false;
        }

        if (i == 9 && str.charAt(9) != '-' || i == 9 && !(Character.isDigit(str.charAt(9)))) {
          System.out.println("here6");
          return false;
        }

        if (i != 0 && i != 3 && i != 5 && i != 7 && i != 9 && !(Character.isDigit(str.charAt(i)))) {
          System.out.println("here7");
          return false;
        }
      }
      return true;
    } else {
      return false;
    }
  }

1 Ответ

1 голос
/ 21 апреля 2020

Общий шаблон регулярных выражений, который может работать здесь:

^(?:\(\d{3}\)\s*|\d{3}-)\d{3}-\d{4}$

Вот объяснение приведенного выше регулярного выражения:

^               from the start of the input
(?:
    \(\d{3}\)   match (xxx)
    \s*         followed by optional whitespace
    |           OR
    \d{3}-      xxx-
)
\d{3}-\d{4}     match xxx-xxxx
$               end of the input

Демо

Это будет охватывать обе версии номера телефона, который вы дали выше. В Java мы можем использовать String#matches здесь:

String phone1 = "(555) 555-5555";
String phone2 = "555-555-5555";

if (phone1.matches("(?:\\(\\d{3}\\)\\s*|\\d{3}-)\\d{3}-\\d{4}")) {
    System.out.println(phone1 + " is in a valid format");
}

if (phone2.matches("(?:\\(\\d{3}\\)\\s*|\\d{3}-)\\d{3}-\\d{4}")) {
    System.out.println(phone2 + " is in a valid format");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...