Проверка номера телефона Android

Как проверить, действительно ли номер телефона или нет? Это длина до 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

Ответ 1

Учитывая указанные вами правила:

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

Пример

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

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

Ответ 3

Чтобы проверить номера телефонов для определенного региона в 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;
}

Ответ 4

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

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

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

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

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

Ответ 5

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

     /**
     * 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();
        }

    }

Ответ 6

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

Ответ 7

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

android.util.Patterns.PHONE

public class GeneralUtils {

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

}

Ответ 8

^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

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

Ответ 9

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

Ответ 10

 String validNumber = "^[+]?[0-9]{8,15}$";

            if (number.matches(validNumber)) {
                Uri call = Uri.parse("tel:" + number);
                Intent intent = new Intent(Intent.ACTION_DIAL, call);
                if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);
                }
                return;
            } else {
                Toast.makeText(EditorActivity.this, "no phone number available", Toast.LENGTH_SHORT).show();
            }

Ответ 11

Вот как вы можете сделать это кратко в Котлине:

fun String.isPhoneNumber() =
            length in 4..10 && all { it.isDigit() }

Ответ 13

^\+201[0|1|2|5][0-9]{8}

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

Ответ 14

При проверке номеров телефонов вы не должны использовать регулярные выражения. Проверьте этот API JSON - numverify.com - он бесплатный для нунвера, если звонки в месяц и возможность проверки любого номера телефона. Кроме того, каждый запрос содержит местоположение, тип линии и информацию о несущей.