Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение для проверки мобильного (https://javascript.ru/forum/misc/68019-regulyarnoe-vyrazhenie-dlya-proverki-mobilnogo.html)

DVMade 21.03.2017 11:33

Регулярное выражение для проверки мобильного
 
Всем привет! Только начинаю работать с JS, по сей причине довольно глупый и простой вопрос.

Мне нужно с помощью регулярного выражения проверить правильность введенного моб. телефона.
Телефон должен вводится российский, т.е. формат следующий:
79nnnnnnnnn
Т.е. ограничение по символам - 11, только цифры, первая 7, вторая - 9.
Буду очень признателен за помощь с регуляркой!
Заранее благодарен

laimas 21.03.2017 11:47

<!DOCTYPE HTML>
<html>
<head>
<style>
input:invalid {
    color: #f00;
}
</style> 
</head>
<body>
<input pattern="79\d{9}" />
</body>
</html>

DVMade 21.03.2017 11:48

Спасибо за овтет! Мне важно именно на JS это реализовать

laimas 21.03.2017 11:50

Да хоть на Бейсике, шаблон при этом будет тот же самый - 79\d{9}.

Или вопрос нужно ставить не о рег. выражении, то есть шаблоне, а о том как проверить на JS. Это надо?

DVMade 21.03.2017 11:56

Смотрите, у меня сейчас так:
if (phone.match(/^79\d{9}$/i)){
				$("#phone").css('border', '0px');            	
            	$('#errorBlock').css('display', 'none'); 
            	$('input:submit').removeAttr("disabled");
			}else{
                $("#phone").css('border', 'red 1px solid');
                $('#errorBlock').css('display', 'block'); 
                $('#errorBlock').html('Номер мобильного телефона введен не верно!');
                $('input:submit').attr("disabled", true);
			}


Но работает не корректно, скрипт выдает ошибку, только если меньше 10 символов введено... по маске он не работает

рони 21.03.2017 12:15

Цитата:

Сообщение от DVMade
phone

что это?

laimas 21.03.2017 12:40

Очередной "аут"? Очередной кошмар с сервером форума.

Для цифр не существует понятия верхний или нижний регистр, модификатор i не нужен.

рони 21.03.2017 12:48

laimas,
атака ботов, сервер работает в режиме защиты

laimas 21.03.2017 12:53

Цитата:

Сообщение от рони
сервер работает в режиме защиты

подсчитывая количество символов переданных формой? :)

Короткое принял Очередной "аут" без проблем, а то, что хотел отослать, не так и большое, ни в какую.

DVMade 21.03.2017 13:18

Как правильно?

рони 21.03.2017 13:26

Цитата:

Сообщение от laimas
а то, что хотел отослать, не так и большое, ни в какую.

попробуй отправлять крупное сообщение через кнопку Расширенный режим там будет проверка через капча, но всё отправит

laimas 21.03.2017 13:27

Цитата:

Сообщение от DVMade
Как правильно?

Что? Сам шаблон указан верно, i лишнее, а задание границ (^$) есть условие проверять всю строку, то есть ошибка будет если меньше 11, больше 11, ну и естественно если не цифры, и в начале не 79.

Кстати, принуждать пользователя вводить номер строго так как вам нравится, не лучшее решение.

рони 21.03.2017 13:27

Цитата:

Сообщение от DVMade
Как правильно?

правильно сделать макет минимальный или ответить что вы проверяите, что такое phone

laimas 21.03.2017 13:38

Цитата:

Сообщение от рони
Попробуй отправлять крупное сообщение через кнопку Расширенный режим

Да вроде ожил уже. )

DVMade 21.03.2017 14:39

Мне важен строгий формат 79nnnnnnnnn
В дальнейшем на это поле будет работать скрипт, с СМС верификацией.

ksa 21.03.2017 14:43

Цитата:

Сообщение от DVMade (Сообщение 448001)
Смотрите, у меня сейчас так:
if (phone.match(/^79\d{9}$/i)){
				$("#phone").css('border', '0px');            	
            	$('#errorBlock').css('display', 'none'); 
            	$('input:submit').removeAttr("disabled");
			}else{
                $("#phone").css('border', 'red 1px solid');
                $('#errorBlock').css('display', 'block'); 
                $('#errorBlock').html('Номер мобильного телефона введен не верно!');
                $('input:submit').attr("disabled", true);
			}


Но работает не корректно, скрипт выдает ошибку, только если меньше 10 символов введено... по маске он не работает

Тогда уже так...

var str='79123456789';
if (/^79\d{9}$/.test(str)) {
	alert('Ok');
} else {
	alert('Error');
};

laimas 21.03.2017 14:57

Цитата:

Сообщение от DVMade
Мне важен строгий формат 79nnnnnnnnn

А зачем он лично вам? Понятное дело, что в базе данных нужно держать в удобном формате, только числа, ведь нужно не только проверять корректность ввода, но и есть ли такой уже в базе. То есть нужно не вам, а СУБД.

А вот для пользователя телефон давно уже сначала стиль жизни и только затем устройство для связи. А в жизни человек всегда приобретает навыки, привычки. Кто-то лучше воспринимает номер как 7 999 999 99 99, а кому-то удобнее 7 999 999-99-99. Так ли важна +7 или же можно и 8?

Вы пытаетесь сделать невозможное - отучить человека от его привычек. А стоит ли это делать? Ведь если проверка сценарием, что же мешает перед проверкой по шаблону удалить все не цифровые символы разрешенные наряду с цифрами для ввода? Это ведь не сложно, и записать в базу только цифры также не сложно будет.

Либо добавляйте удобства для пользователя - 79 автоматом подставляется в шаблон и вводить не требуется, и все остальное по шаблону, автоматически вырезая не цифры.

DVMade 21.03.2017 15:31

все равно не работает, позволяет ввести больше цифр и не в этом формате... или я что-то не понимаю...

ksa 21.03.2017 15:33

Цитата:

Сообщение от DVMade
все равно не работает, позволяет ввести больше цифр и не в этом формате...

Покажи на моем примере (см.выше) какой вариант со значением переменной str у тебя "проходит"...

DVMade 21.03.2017 17:56

1234567890

DVMade 21.03.2017 17:58

Сейчас вот так у меня:
var phone = $("#phone").val();
			if (/^79\d{9}$/.test(phone)) {

Пропускает даже 1234567890 и дальше все цифры... какой угодно длинны значение =)

Dilettante_Pro 21.03.2017 18:11

<input type='text' id = 'phone' onchange='testPhone();'>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
function testPhone() {
var phone = $("#phone").val();
if (/^79\d{9}$/.test(phone)) {
	alert('Ok');
} else {
	alert('Error');
};
}
</script>

рони 21.03.2017 18:17

DVMade,
вы что-то не договариваите ...

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
     .red{
        background-color: #FF3333;
     }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $("#phone").on("input",function() {
    this.className = /^79\d{9}$/.test(this.value) ? "" : "red";
})
});
  </script>
</head>

<body>
<input id="phone" name="">

</body>
</html>

Цитата:

Сообщение от DVMade
var phone = $("#phone").val();

так делать не рекомендуется, лучше назвать переменную иначе, чем id.

ksa 22.03.2017 08:44

Цитата:

Сообщение от DVMade
1234567890

Бивас, тест! (с)

var str='1234567890';
if (/^79\d{9}$/.test(str)) {
	alert('Ok');
} else {
	alert('Error');
};

Проверка не проходит. :stop:

DVMade 22.03.2017 09:47

Все заработало, проблема оказалась в том, что имя переменной у меня соответствовало имени I html-элемента, значение которого и принимала переменная phone. Изменил ей имя и все пошло) Всем спасибо за ответы! =)

GayCoder 24.03.2017 02:46

vanished


Часовой пояс GMT +3, время: 09:59.