проверка номера телефона Java

Вот моя проблема:

Создайте конструктора для номера телефона, учитывая строку в форме 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 недопустимы в этом случае.

Я хотел бы знать, корректно ли мое регулярное выражение

6
задан Michael Myers 31 March 2010 в 18:54
поделиться

2 ответа

Я думал проверить это с помощью регулярного выражения, но не знаю, правильно ли я это делаю.

Это действительно выглядит чрезмерно сложным. Кроме того, сопоставление xxx-xxx-xxxx или xxx-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 , но все же я этого не рекомендую.

Тем не менее, эта проверка, конечно же, не распространяется на международные и / или внешние телефонные номера. Если это действительно не домашнее задание, я предлагаю переосмыслить валидацию.

7
ответ дан 17 December 2019 в 00:06
поделиться

Вы можете довольно легко сопоставить эти шаблоны, как предлагает BalusC.

Кстати, StringTokenizer устарел. Из JavaDoc :

StringTokenizer - это устаревший класс, который сохранен по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы любой, кто ищет эту функциональность, использовал вместо этого метод разделения String или пакет java.util.regex.

Более простой способ разбить строку на соответствующие сегменты:

String phoneParts[] = phoneNumber.split("-");
0
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: