Java Проверка регулярных выражений для телефонных номеров - PullRequest
0 голосов
/ 23 марта 2020

Как написать регулярное выражение java для следующих действительных телефонных номеров?

действительные форматы: 123-456-7890, 1234567890

Я попробовал ниже, что не сработало

 List phoneNumbers = new ArrayList();
 //Valid phone numbers
 phoneNumbers.add("1234567890");
 phoneNumbers.add("123-456-7890");

 //Invalid phone numbers
 phoneNumbers.add("12345678");
 phoneNumbers.add("(123)456-7890");

 String regex = "^\\(?([0-9]{3})\\)?[-]?([0-9]{3})[-]?([0-9]{4})$";

 Pattern pattern = Pattern.compile(regex);

 for(String email : phoneNumbers)
 {
     Matcher matcher = pattern.matcher(email);
     System.out.println(email +" : "+ matcher.matches());
 }

Как мне этого добиться. Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 24 марта 2020

Некоторые связанные вопросы SO:

Кроме того, в то время как вопрос OP требует решения для регулярных выражений в двух указанных c форматах, стоит отметить, что решение для регулярных выражений не подходит для всех телефонных номеров (т.е. при рассмотрении международных номеров). В зависимости от потребностей, возможно, стоит рассмотреть такую ​​библиотеку, как https://github.com/google/libphonenumber

0 голосов
/ 23 марта 2020

Попробуйте:

List<String> phoneNumbers = new ArrayList<>();
//Valid phone numbers
phoneNumbers.add("1234567890");
phoneNumbers.add("123-456-7890");

//Invalid phone numbers
phoneNumbers.add("12345678");
phoneNumbers.add("(123)456-7890");

String regex = "^(?=[1-9]\d{9}|[1-9]\d{2}-\d{3}-\d{4}).+$";

Pattern pattern = Pattern.compile(regex);

for (String phoneNumber : phoneNumbers) {
    Matcher matcher = pattern.matcher(phoneNumber);
    System.out.println(phoneNumber + " : " + matcher.matches());
}

Вывод:

1234567890 : true
123-456-7890 : true
12345678 : false
(123)456-7890 : false
0 голосов
/ 23 марта 2020

Используйте [1-9]{3}[-]?[0-9]{3}[-]?[0-9]{4} в качестве регулярного выражения.

Демонстрация:

public class Regex123 {
    public static void main(String[] args) {
        String[] testStrs = { "123-456-7890", "1234567890", "123456789", "1-2-3", "123456789-000000000-1234",
                "0123456789", "(123)456-7890" };
        for (String str : testStrs) {
            if (str.matches("[1-9]{3}[-]?[0-9]{3}[-]?[0-9]{4}")) {
                System.out.println(str + " matches");
            } else {
                System.out.println(str + " does not match");
            }
        }
    }
}

Выход:

123-456-7890 matches
1234567890 matches
123456789 does not match
1-2-3 does not match
123456789-000000000-1234 does not match
0123456789 does not match
(123)456-7890 does not match
0 голосов
/ 23 марта 2020

Кажется, что с двумя форматами это будет проще. Пусть x будет ди git.

  • xxx, затем -xxx- или xxx, а затем xxxx.
        Predicate<String> check =
                s -> s.matches("^\\[1-9]\\d{2}((-\\d{3}-)|(\\d{3}))\\d{4}$");

        List<String> phoneNumbers = new ArrayList<>(
                List.of("123-456-7890", "123456789", "1234-55-888",
                        "1234567898", "112-", "123456689001"));

        for (String phone : phoneNumbers) {
            System.out.printf("%8s -> %s%n",
                    check.test(phone) ? "valid" : "invalid", phone);
        }

Печать

   valid -> 123-456-7890
 invalid -> 123456789
 invalid -> 1234-55-888
   valid -> 1234567898
 invalid -> 112-
 invalid -> 123456689001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...