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

  • Автор темы Автор темы Boris
  • Дата начала Дата начала

Boris

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

Добрый день

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

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

-~{}~ 04.03.09 11:21:

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

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

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;

}

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

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()" />
 
по-моему к моменту события onkeypress в input.value еще нету нужного символа, так что последний не проверяется. у меня подобное реализовано через добавление символа ф-ей String.fromCharCode(event.keyCode||event.charCode), но для этого надо иметь событие и не учитываются регистры/контролы и языки
 
tashkentchi, не тупи. надо чтобы событие не обрабатывалось дальше (недопустимый символ не вводился), для inline обработчиков это значит, что надо возвращать false
 
Boris, ты из своей ф-ии возвращаешь. а надо из ф-ии обработчика, которая неявно создается, поэтому onkeypress="return check_telephone()"

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

-~{}~ 04.03.09 10:22:

п.с. можно тупо сделать setInterval(check_telephone, 500); и все время резать лишнее. Это поможет бороться со вставкой через paste.
 
Автор оригинала: dimagolov
tashkentchi, можно и на onchange, но проблема в том, что он по-моему срабатывает только после onblur, а не во время набора в инпуте.
onchange помогает при paste. И срабатывает после onblur. Это точно. Про setInterval согласен.
 
Автор оригинала: 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:

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

чтобы переделать твою check_telephone так, чтобы ее можно было вызывать по setInterval, надо чтобы она не отдавала true/false, а вырезала из input-а недопустимые символы.
 
dimagolov , на самом деле участие в форуме дело добровольное и больше того тот кто не хочет отвечать никто не заставляет а если говорить откравенно если бы я хотел заплатить а не научиться сам то я бы этим не занимался . Но огромное спасибо за безплатный ответ и совет .

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

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

Не потому, что я - жлоб, а потому, что хочу добра своим людям. Пусть учатся (даже если не хотят). Им приходится лазить в гугл, чтобы понять мои советы. И никто из них не обижается на меня дольше 2х часов. Потому что я прав. Отнеситесь к профессионалам на этом форуме также. Жить станет легче.
 
Нет никаких обид . Просто я думаю изначально не надо было делать то что я хотел а просто брать стринг и каждый раз когда меняется разрезать по символу и проверять , не думал что эта простая задача должна забрать больше чем 30 мин , не зная все тонкости приходится тыкаться . Никто не просит писать , просьба заключалась в том чтобы указать в том что есть ошибки и если можно подробно объяснить технику или дать ссылку на источник который объясняет метод проверки . Разробатывая на других языках , мои сотрудниеи в том числе и я , мы имели дело с маской и закрывали любую возможность не превильного ввода , там техника ясна , прописав правильно маску . из этого опыты я и думал сделать это на явескрипт . написав о том что действительно мне не очень помог открытый форум я сказал что его можно закрыть так как многие новички врядле поймут все что тут есть . не хочу обидеть никого но иногда с высоты опыта сложно понять что не понятного знаю по себе
 
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>
 
Сверху