как разрешить ввод в поле только определенных символов

Boris

Новичок
как разрешить ввод в поле только определенных символов

Добрый день

Как разрешить, с помощью яваскрипт, ввод в поле под названием телефон символы от 0 до 9 + - и скобки ()

спасибо за помощь

-~{}~ 04.03.09 11:21:

другими словами как сделать маску на поле
 

DiMA

php.spb.ru
Команда форума
ну, если ты насколько обленился, что не можешь найти через поиск готовый пример...
- разбираешь строку побуквенно циклом и проверяешь соотвествие каждого символа твоим условиям
- или регом
 

Boris

Новичок
нет нет вовсе дело не в лени

просто на самом деле я нашел вот такую штуку для проверки имэила

reg = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$/;


и честно говоря не нашел описание почему и как это построили а хотелось бы так как и в данном случае можно что такое сделать и не писать длинный код проверки каждого символа на аски а указать только те символы которые нужны а потом

if (!document.form.telephone.value.match(reg))
{

return false;

}

вот такие дела просто может кто то обьяснит как работает это строка
 

Фанат

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

Boris

Новичок
о спасибо большое уже нашел на всякий случай если кто то сюда зайдет вот ссылка

http://www.softtime.ru/info/articlephp.php?id_article=42

всем спасибо

-~{}~ 04.03.09 14:29:

подскажите что я не так делаю

function check_telephone()
{
reg = /[\0-9\-\+\(\)]/;

if(!document.form.t_number.value.match(reg))
{
alert("BGraf");
return false;
}
}


<input style="border:1px; background-color: #EBEBEB;" name="t_number" value="" type="text" dir="rtl" lang="he" id="font" onkeypress="return check_telephone()" />
 

dimagolov

Новичок
по-моему к моменту события onkeypress в input.value еще нету нужного символа, так что последний не проверяется. у меня подобное реализовано через добавление символа ф-ей String.fromCharCode(event.keyCode||event.charCode), но для этого надо иметь событие и не учитываются регистры/контролы и языки
 

dimagolov

Новичок
tashkentchi, не тупи. надо чтобы событие не обрабатывалось дальше (недопустимый символ не вводился), для inline обработчиков это значит, что надо возвращать false
 

dimagolov

Новичок
Boris, ты из своей ф-ии возвращаешь. а надо из ф-ии обработчика, которая неявно создается, поэтому onkeypress="return check_telephone()"

tashkentchi, можно и на onchange, но проблема в том, что он по-моему срабатывает только после onblur, а не во время набора в инпуте.

-~{}~ 04.03.09 10:22:

п.с. можно тупо сделать setInterval(check_telephone, 500); и все время резать лишнее. Это поможет бороться со вставкой через paste.
 

tashkentchi

Новичок
Автор оригинала: dimagolov
tashkentchi, можно и на onchange, но проблема в том, что он по-моему срабатывает только после onblur, а не во время набора в инпуте.
onchange помогает при paste. И срабатывает после onblur. Это точно. Про setInterval согласен.
 

Boris

Новичок
Автор оригинала: dimagolov
Boris, ты из своей ф-ии возвращаешь. а надо из ф-ии обработчика, которая неявно создается, поэтому onkeypress="return check_telephone()"

tashkentchi, можно и на onchange, но проблема в том, что он по-моему срабатывает только после onblur, а не во время набора в инпуте.

-~{}~ 04.03.09 10:22:

п.с. можно тупо сделать setInterval(check_telephone, 500); и все время резать лишнее. Это поможет бороться со вставкой через paste.
да у меня так и есть

<input style="border:1px; background-color: #EBEBEB;" name="t_number" value="" type="text" dir="rtl" lang="he" id="font" onkeypress="return check_telephone()" />

-~{}~ 04.03.09 18:18:

люди я все понимаю , спасибо за помощь , но можно просто попрасить изменить то что не правельно написано а я потом просто разберусь в написанном . спасибо
 

dimagolov

Новичок
Boris, написание кода за деньги.
у тебя не работает потому что событие onkeypress происходит ДО того, как введенный символ попал в input. я об этом писал.

чтобы переделать твою check_telephone так, чтобы ее можно было вызывать по setInterval, надо чтобы она не отдавала true/false, а вырезала из input-а недопустимые символы.
 

Boris

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

Спасибо всем . На самом деле открытая мной тема не дала мне достаточно информации для того чтобы решить мою проблему и я так понимаю что уже никто не поможет поэтому мадератор тему можно закрывать .

Regards
 

tashkentchi

Новичок
Boris, я являюсь тимлидером в группе из 6 разработчиков. Я очень часто смотрю, что и как пишет каждый из них. В 60% случаев я советую написать иначе. Но практически НИКОГДА я не пишу им код, который они сами должны написать.

Не потому, что я - жлоб, а потому, что хочу добра своим людям. Пусть учатся (даже если не хотят). Им приходится лазить в гугл, чтобы понять мои советы. И никто из них не обижается на меня дольше 2х часов. Потому что я прав. Отнеситесь к профессионалам на этом форуме также. Жить станет легче.
 

Boris

Новичок
Нет никаких обид . Просто я думаю изначально не надо было делать то что я хотел а просто брать стринг и каждый раз когда меняется разрезать по символу и проверять , не думал что эта простая задача должна забрать больше чем 30 мин , не зная все тонкости приходится тыкаться . Никто не просит писать , просьба заключалась в том чтобы указать в том что есть ошибки и если можно подробно объяснить технику или дать ссылку на источник который объясняет метод проверки . Разробатывая на других языках , мои сотрудниеи в том числе и я , мы имели дело с маской и закрывали любую возможность не превильного ввода , там техника ясна , прописав правильно маску . из этого опыты я и думал сделать это на явескрипт . написав о том что действительно мне не очень помог открытый форум я сказал что его можно закрыть так как многие новички врядле поймут все что тут есть . не хочу обидеть никого но иногда с высоты опыта сложно понять что не понятного знаю по себе
 

TPABKA

Новичок
Re: как разрешить ввод в поле только определенных символов

Вот самое простое что можно придумать)

Код:
<script language=Javascript type=text/javascript>

function keyDownNumber(e)
{
 var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);
  if (e.ctrlKey || e.altKey || key < 58)    return true;
  else    return false;
}

</script>
потом делаем поле.
<input name="phone" type="text" onkeypress='return keyDownNumber(event);' value="" size="30" maxlength=50>
 
Сверху