Проверка номера телефона на Java - PullRequest
2 голосов
/ 23 февраля 2012

Я использую следующий код для подтверждения номера телефона.Требования: номер телефона должен быть длиной от 10 до 25 символов, должен включать в себя переносы (-), точку (.), Круглые скобки ().

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ValidatePhoneNumber {

public static void main(String[] argv) {

    String phoneNumber = "6058.8()6-05888,9994567";
    System.out.println(phoneNumber.length());
    //String sPhoneNumber = "605-88899991";
    //String sPhoneNumber = "605-888999A";
    String regex = "^[0-9.()-]{10,25}$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(phoneNumber);

    if (matcher.matches()) {
        System.out.println("Phone Number Valid");
    } else {
        System.out.println("Phone Number must be in the form XXX-XXXXXXX");
    }
  }
 }

Я проверил проверки и все работает нормально, яВы также хотите добавить пробел "\ s", чтобы между телефонными номерами также могли быть пробелы.Но получая ошибки при добавлении "\ s" в регулярное выражение.

Ответы [ 5 ]

7 голосов
/ 23 февраля 2012

Пожалуйста, посмотрите на стандарты, такие как МСЭ E.164 или IETF RfC 3966. Не думайте, что в каждой стране одинаковые соглашения и длины номеров.

Вот соответствующая часть ABNF из RfC 3966

global-number-digits = "+" *phonedigit DIGIT *phonedigit
phonedigit           = DIGIT / visual-separator 
visual-separator     = "-" / "." / "(" / ")"
DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"

Недавно у нас возникла огромная проблема с устройством, которое не позволяло пользователю вводить «+» как часть телефонного номера.

3 голосов
/ 23 февраля 2012

Я бы посоветовал , а не , будучи настолько суетливым с телефонными номерами, люди любят использовать пробелы и скобки по-своему, и такая строгость может просто раздражать.Почему бы не ограничить его только числами, но в противном случае пробелы / скобки и т. Д. В порядке?

Также - иногда международные номера используют символ '+'.

1 голос
/ 23 февраля 2012

У вас есть это в методе main (), предположительно для целей публикации здесь. Однако, если этот код запускается несколько раз, вы должны рассмотреть возможность перемещения компиляции регулярных выражений за пределы вызываемого метода. Компиляция потенциально дорогая.

Обратите внимание, что java.util.regex.Pattern является потокобезопасным, java.util.regex.Matcher не так, стандартная идиома выглядит примерно так:

public class PhoneNumberValidator {

    private static Pattern VALID_PHONE_NUMBER = 
        Pattern.compile("^[0-9.()-]{10,25}$");

    public boolean isValidPhoneNumber(String s) {

         Matcher m = VALID_PHONE_NUMBER.matcher(s);

         return m.matches();
    }

}
0 голосов
/ 06 февраля 2014

Я использую это регулярное выражение: "^ (1 [\ s -]?)? (((\ D {3})) | (\ d {3})) [\ s -]? \ D {3}[\ s -]? \ d {4} $ "Вероятно, это больше, чем мне действительно нужно, особенно потому, что я работаю на мобильном телефоне, поэтому люди редко используют паренсы или тире, но это меня радует.

0 голосов
/ 23 февраля 2012

Возможно, что-то вроде этого было бы лучше

"\\(?[\\d]{3}\\)?\\-?[\\d]{w}\\-?[\\d]{4}"

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

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