@sophiko

Регулярные выражения, что не так с $?

Здравствуйте,
выражениями нечасто пользуюсь.
Написала код для проверки введенного телефона (согласно заданию 2 варианта формата:
а) +7 123 12312345;
б) 123 12312345;)
Код:
function checkPhone(input){
  var patt = /^\+7\s\d{3}\s\d{7}|^\d{3}\s\d{7}/;

  var res = patt.test(input);
  return res;
};
//А это тест для проверки и что должно выдавать:
checkPhone('+7 123 12312345');//true
checkPhone('123 12312345'); // true
checkPhone('123 12312345aaa'); // false

В последнем выдает ошибочно true.
Нашла оператор $ конца строки, но когда записываю:
/^\+7\s\d{3}\s\d{7}$|^\d{3}\s\d{7}$/
мой браузер мне пишет все три теста false.
Подскажите, пожалуйста, что я неправильно делаю?
  • Вопрос задан
  • 2309 просмотров
Решения вопроса 1
kompi
@kompi
nullstack devoops
12312345 - всего 8 цифр, а у вас в регулярке d{7}, сооствественно с d{7}$ - все будут false;
Вариант по-короче: /^(\+7\s)?\d{3}\s\d{8}$/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Очевидно же, что цифр в российском телефонном номере не может быть 8... И не нужно забывать, что человек может ввести пробел, где не надо.

function checkPhone(input){
	var result = /^\s*(?:\+7\s*)?(?:\d\s*?){10}$/.test(input);

	console.log(result);
	return result;
};

//А это тест для проверки и что должно выдавать:
checkPhone('+7 123 1234567'); // true
checkPhone('123 1234567'); // true
checkPhone('123 1234567aaa'); // false
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы