Проверка номера телефона 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() }
Ответ 12
Я получил лучшее решение для проверки международного номера телефона, и выбор кода страны ниже библиотеки оправдан для меня. Лучшая библиотека для всех пользовательских интерфейсов и функций CountryCodePickerProject
Ответ 13
^\+201[0|1|2|5][0-9]{8}
это регулярное выражение соответствует номерам египетских мобильных
Ответ 14
При проверке номеров телефонов вы не должны использовать регулярные выражения. Проверьте этот API JSON - numverify.com - он бесплатный для нунвера, если звонки в месяц и возможность проверки любого номера телефона. Кроме того, каждый запрос содержит местоположение, тип линии и информацию о несущей.