проверка номера телефона Java - PullRequest
5 голосов
/ 31 марта 2010

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

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

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

Ответы [ 4 ]

7 голосов
/ 31 марта 2010

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

Это действительно выглядит слишком сложным. Кроме того, соответствие xxx-xxx-xxxx или xxx-xxxx, где x - это цифра, может быть лучше выполнено с помощью "(\\d{3}-){1,2}\\d{4}". Чтобы узнать больше о регулярных выражениях, я рекомендую пройти через http://regular -expressions.info .

Кроме того, какое исключение я должен был бы бросить? Нужно ли создавать собственное исключение?

A ValidatorException кажется прямым.

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

Если по каким-то причинам вы не хотите создавать его самостоятельно, я бы, вероятно, выбрал IllegalArgumentException, но, тем не менее, я не рекомендую этого.

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

3 голосов
/ 28 июня 2013
^(([(]?(\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

Может заменить '-' на ПРОБЕЛ, т.е. (0080) 123 12345678

Также соответствует + 82-123-1234567, +82 123 1234567, +800 01 12345678 ... и т. Д.

Больше для домашнего / частного номера. Не для 1-800-000-0000 тип номера

* Протестировано с помощью тестера Regex http://regexpal.com/

0 голосов
/ 14 августа 2013

String pincode = "589877";

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

\ d обозначает цифры. внутри фигурных скобок количество цифр Matcher matcher = pattern.matcher (пин-код);

    if (matcher.matches()) {
        System.out.println("Pincode is Valid");
        return true;
    } else {
        System.out.println("pincode must be a 6 digit Number");
0 голосов
/ 31 марта 2010

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

Как примечание, StringTokenizer устарело. От JavaDoc :

* +1007 *

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

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

String phoneParts[] = phoneNumber.split("-");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...