Регулярное выражение не правильно очищает номер телефона
Код:
public class PhoneCleanerRegex {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
if (input.equals("0")) {
scanner.close();
break;
}
//TODO:напишите ваш код тут, результат вывести в консоль.
input.replaceAll("^(\\+)[0123456]","");
String regex = "(7|8)90(5|9)[0-9]{7,11}";
String regex2 = "90(5|9)[0-9]{7,11}";
String[] split = input.split("[0-9]");
String number1 = split[0];
if(input.matches(regex)){
System.out.println(input);
}else if (input.matches(regex2)){
System.out.println("7"+input);
}else if(number1 == "8"){
input.replaceAll(number1,"7");
System.out.println(input);
}else {
System.out.println("Неверный формат номера");
}
}
Проблема:
Не могу корректно составить выражение что бы в начале строки символ "+" заменить на пустоту, также элементы в номерах +7 909 123-45-67;905-1234567;8-905-1234567;+7 (909) 1234567.
Ответы (1 шт):
Если нужно удалить нецифровые символы, достаточно использовать String::replaceAll с классом символов \D, однако, следует отметить, что этот метод возвращает новую строку, а не изменяет существующую, поэтому результат его вызова нужно (пере)присвоить какой-нибудь переменной.
Затем, судя по всему нужно проверять числа с определённым префиксом 7 или 8, после которого идут коды 905 или 909 и 7 цифр.
Также можно "нормализовать" номер телефона (заменить 8 или пустое место в начале номера цифрой 7):
"(7|8)?90(5|9)\\d{7}": необязательный префикс 7 или 8, после которого идёт код 905 или 909, а затем ровно 7 цифр.cleanedInput.replaceFirst("^(8?)(90)", "7$2")-- заменяет 8 на 7 или вставляет 7 в уже проверенном валидном номере.
String input = scanner.nextLine();
// сразу удалить все нецифровые символы
String cleanedInput = input.replaceAll("\\D+", "");
if (cleanedInput.matches("(7|8)?90(5|9)\\d{7}")) {
System.out.print("Valid phone number: " + input + " -> " + cleanedInput);
cleanedInput = cleanedInput.replaceFirst("^(8?)(90)", "7$2");
System.out.println(" -> " + cleanedInput);
} else {
System.out.print("Invalid phone number: " + input);
}
Тесты:
// 905-1234567
Valid phone number: 905-1234567 -> 9051234567 -> 79051234567
// 8-905-1234567
Valid phone number: 8-905-1234567 -> 89051234567 -> 79051234567
// +7 (909) 1234567, replaceFirst не сработал
Valid phone number: +7 (909) 1234567 -> 79091234567 -> 79091234567
// 905-123456
Invalid phone number: 905-123456
// 7 (905)-12345678
Invalid phone number: 7 (905)-12345678