Проверка номера телефона Android - PullRequest
47 голосов
/ 15 июня 2011

Как я могу проверить, является ли номер телефона действительным или нет? Длина до 13 (включая символ + спереди).

Как мне это сделать?

Я пробовал это:

String regexStr = "^[0-9]$";

String number=entered_number.getText().toString();  

if(entered_number.getText().toString().length()<10 || number.length()>13 || number.matches(regexStr)==false  ) {
    Toast.makeText(MyDialog.this,"Please enter "+"\n"+" valid phone number",Toast.LENGTH_SHORT).show();
    // am_checked=0;
}`

И я тоже попробовал это:

public boolean isValidPhoneNumber(String number)
{
     for (char c : number.toCharArray())
     {
         if (!VALID_CHARS.contains(c))
         {
            return false;
         }
     }
     // All characters were valid
     return true;
}

Оба не работают.

Тип ввода: + sign to be accepted and from 0-9 numbers and length b/w 10-13 and should not accept other characters

Ответы [ 14 ]

103 голосов
/ 15 июня 2011

Используйте isGlobalPhoneNumber() метод PhoneNumberUtils, чтобы определить, является ли номер действительным номером телефона.

Пример

System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));

Результат первого оператора печати равен true, в то время какрезультат second равен false, поскольку второй номер телефона содержит f.

35 голосов
/ 15 июня 2011

С учетом указанных вами правил:

до длины 13 и включая символ + инфронт.

(включая также минимальную длину 10 в вашем коде)

Вам понадобится регулярное выражение, которое выглядит следующим образом:

^\+[0-9]{10,13}$

С минимальной и максимальной длинами, закодированными в регулярном выражении, вы можете отбросить эти условия из своего блока if().

Не по теме: я бы предположил, что диапазон от 10 до 13 слишком ограничен для поля международного телефонного номера;Вы почти наверняка найдете действительные числа, которые как длиннее, так и короче этого.Я бы предложил диапазон 8 - 20, чтобы быть безопасным.

[EDIT] OP утверждает, что приведенное выше регулярное выражение не работает из-за escape-последовательности.Не уверен, почему, но альтернативой будет:

^[+][0-9]{10,13}$

[EDIT 2] OP теперь добавляет, что знак + должен быть необязательным.В этом случае регулярному выражению требуется знак вопроса после +, поэтому приведенный выше пример теперь будет выглядеть так:

^[+]?[0-9]{10,13}$
24 голосов
/ 17 марта 2015

Чтобы проверить телефонные номера для определенного региона в Android, используйте libPhoneNumber от Google и следующий код в качестве примера:

public boolean isPhoneNumberValid(String phoneNumber, String countryCode)
{
    //NOTE: This should probably be a member variable.
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

    try 
    {
        PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
        return phoneUtil.isValidNumber(numberProto);
    } 
    catch (NumberParseException e) 
    {
        System.err.println("NumberParseException was thrown: " + e.toString());
    }

    return false;
}
19 голосов
/ 15 мая 2014

Вы можете использовать встроенный Android Patterns:

public boolean validCellPhone(String number)
{
    return android.util.Patterns.PHONE.matcher(number).matches();
}

Этот шаблон предназначен для поиска вещей, которые выглядят как могут быть номера телефонов в произвольном тексте, не для проверки того, что-то на самом деле номер телефона. Он пропустит много вещей, которые законные номера телефонов.

Шаблон соответствует следующему:

  • По желанию, знак +, сопровождаемый сразу одной или несколькими цифрами. Могут следовать пробелы, точки или тире.
  • При желании, наборы цифр в круглые скобки, разделенные пробелами, точками или тире.
  • Строка, начинающаяся и заканчивается цифрой, содержащей цифры, пробелы, точки и / или дефис.
8 голосов
/ 17 июля 2015

Вы также можете проверить правильность номера телефона как

     /**
     * Validation of Phone Number
     */
    public final static boolean isValidPhoneNumber(CharSequence target) {
        if (target == null || target.length() < 6 || target.length() > 13) {
            return false;
        } else {
            return android.util.Patterns.PHONE.matcher(target).matches();
        }

    }
5 голосов
/ 15 июня 2011

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

4 голосов
/ 19 октября 2016

Мы можем использовать шаблон для проверки.

android.util.Patterns.PHONE

public class GeneralUtils {

    private static boolean isValidPhoneNumber(String phoneNumber) {
        return !TextUtils.isEmpty(phoneNumber) && android.util.Patterns.PHONE.matcher(phoneNumber).matches();
    }

}
2 голосов
/ 10 января 2018
^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

Проверьте свои дела здесь: https://regex101.com/r/DuYT9f/1

1 голос
/ 03 августа 2015

Вы можете использовать эту библиотеку . Все, что вам нужно сделать, это передать страну и номер телефона, который вы хотите проверить.

0 голосов
/ 26 июня 2019
^\+201[0|1|2|5][0-9]{8}

это регулярное выражение соответствует номерам египетских мобильных телефонов

...