Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверка номера телефона (https://javascript.ru/forum/misc/33389-proverka-nomera-telefona.html)

VetalMan23 21.11.2012 15:27

Проверка номера телефона
 
Стоит задача проверить форму на правильность записи формата:
8-(XXXX)-XXXXXX 8-(XXX)-XXX-XX-XX
Всё в 1 строку, учитывая пробел.
У меня возникла проблема проверки повторяющихся наборов символов: ")-". Ещё программа не может проверить "-", выдавая ошибку.

Мои попытки:

function proverka0()
{
Telefon=document.form1.TLF.value;
a=Telefon.indexOf('8-(');
b=Telefon.indexOf(')-');
c=Telefon.indexOf(' 8-(');
/*d=Telefon.indexOf('-');
e=Telefon.indexOf('-');
f=Telefon.indexOf('-');
g=Telefon.indexOf('');*/

if (a==0 && b==7 && c==15)// && d==27)// && d==b2+5) //&& c>=b+14 && d>=c+18 && e>=d+22 && f>=e+25 && g>=27)
{
alert("Телефон введён правильно");
form1.submit();
}
else
{
alert("Телефон введён неправильно");
}
}


Как правильно нужно делать проверку повторяющихся символов и "-"?

Margarita 21.11.2012 16:36

мне кажется, что если у вас должен быть один -, то можно найти значение первого - и проверить что следующий символ после него является числом или скобкой
где-то так:
if(Telefon.charAt(Telefon.indexOf("-")+1) == "(" || !isNAN(Telefon.charAt(Telefon.indexOf("-")+1)) {
alert("Ok");
}

Aetae 21.11.2012 16:57

Убивать. Насиловать сучковатой толстой веткой до самой смерти за такое.
Проблемы форматирования телефона - это твои проблемы, а не проблемы человека пришедшего на твой сайт. Человек должен вводить номер телефона так, как ему это нравится, а если ты не удосужился выучить регулярки - это проблема твоей некомпетентности.

VetalMan23 22.11.2012 10:54

Цитата:

Сообщение от Margarita (Сообщение 217119)
мне кажется, что если у вас должен быть один -, то можно найти значение первого - и проверить что следующий символ после него является числом или скобкой
где-то так:
if(Telefon.charAt(Telefon.indexOf("-")+1) == "(" || !isNAN(Telefon.charAt(Telefon.indexOf("-")+1)) {
alert("Ok");
}

Если речь идёт об одном из 2-х последних "-", то как проверить на наличие второе "-"?

VetalMan23 22.11.2012 10:56

Цитата:

Сообщение от Aetae (Сообщение 217126)
Убивать. Насиловать сучковатой толстой веткой до самой смерти за такое.
Проблемы форматирования телефона - это твои проблемы, а не проблемы человека пришедшего на твой сайт. Человек должен вводить номер телефона так, как ему это нравится, а если ты не удосужился выучить регулярки - это проблема твоей некомпетентности.

Это задание на лабораторную работу. Теперь вежливо извинись и вали отсюда.

Margarita 22.11.2012 12:03

Цитата:

Сообщение от VetalMan23 (Сообщение 217231)
Если речь идёт об одном из 2-х последних "-", то как проверить на наличие второе "-"?

если вы имеет в виду два - подряд, то для первого будет проверка на следующий "-", а для второго уже написанная выше проверка

Aetae 22.11.2012 15:07

Цитата:

Сообщение от VetalMan23 (Сообщение 217232)
Это задание на лабораторную работу. Теперь вежливо извинись и вали отсюда.

Извиниться? Перед не способным самостоятельно выполнить то, чему, очевидно, он должен был научиться? Не смеши меня.

Sanda 22.11.2012 15:31

Правильно использовать регулярные выражения.
phone = '8-(1234)-567890 8-(123)-456-78-90';
alert(
	'Номер введён ' + 
	(phone.replace(/8\-\(\d{3}\)\-\d{6} 8\-\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}/, '').length ? 'не' : '') + 
	'правильно'
);

Антон Крамолов 22.11.2012 15:50

/^8\-(?:\(\d{4}\)\-\d{6}|\(\d{3}\)\-\d{3}\-\d{2}\-\d{2})$/.test('8-(0000)-000000')

VetalMan23 22.11.2012 16:38

Цитата:

Сообщение от Sanda (Сообщение 217268)
Правильно использовать регулярные выражения.
phone = '8-(1234)-567890 8-(123)-456-78-90';
alert(
	'Номер введён ' + 
	(phone.replace(/8\-\(\d{3}\)\-\d{6} 8\-\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}/, '').length ? 'не' : '') + 
	'правильно'
);

Как ни странно, этот вариант не работает. Ввожу 8-(1234)-567890 8-(123)-456-78-90, но всё-равно выводит "Не правильно".

VetalMan23 22.11.2012 16:42

Цитата:

Сообщение от Aetae (Сообщение 217264)
Извиниться? Перед не способным самостоятельно выполнить то, чему, очевидно, он должен был научиться? Не смеши меня.

Именно извиниться. Ты сам не можешь дописать функцию по моему методу.

Sanda 22.11.2012 23:26

Опечатался. Так должно работать:
phone = '8-(1234)-567890 8-(123)-456-78-90';
alert(
    'Номер введён ' +
    (phone.replace(/8\-\(\d{4}\)\-\d{6} 8\-\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}/, '').length ? 'не' : '') +
    'правильно'
);

Это если в строке именно два телефона в таком формате. Если телефонов может быть N, лучше взять выражение из поста Антона Крамолова и добавить к нему /g-флаг

VetalMan23 26.11.2012 14:03

Цитата:

Сообщение от Sanda (Сообщение 217347)
Опечатался. Так должно работать:
phone = '8-(1234)-567890 8-(123)-456-78-90';
alert(
    'Номер введён ' +
    (phone.replace(/8\-\(\d{4}\)\-\d{6} 8\-\(\d{3}\)\-\d{3}\-\d{2}\-\d{2}/, '').length ? 'не' : '') +
    'правильно'
);

Это если в строке именно два телефона в таком формате. Если телефонов может быть N, лучше взять выражение из поста Антона Крамолова и добавить к нему /g-флаг

спасибо, офигенно работает)

Aetae 26.11.2012 14:17

Sanda,
.test()? Не, не слышал.

Sanda 27.11.2012 12:42

Цитата:

Сообщение от Aetae (Сообщение 217910)
Sanda,
.test()? Не, не слышал.

Слышал (: Но почему-то не был уверен, что с символами ^ и $ будет правильно работать (: Протестировал, теперь уверен (:


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