Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Блокировка недопустимых символов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Bertolomych
Отправлено: 08 Августа, 2010 - 14:07:42
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Здравствуйте!
Столкнулся с проблемой блокировки недопустимых символов в поле ввода (например, букв, там, где должны быть только цифры). И, хотя, казалось бы, проблема тривиальная и часто возникает, почему-то не могу найти нормального решения.
В основном нашел вот такие:
CODE (javascript):
скопировать код в буфер обмена
  1. <input type="text" onkeyup="this.value = this.value.replace(/[^0-9:.\/]/, '')">

Но у этого решения есть один существенный недостаток: если ввести строку, а потом попытаться отредактировать ее середину, то ничего не выйдет - при нажатии клавиши, курсор смещается в конец строки, и именно там и вводит символ.
Некоторые товарищи предлагают использовать keycode и event.stopPropagation. Но тут возникает вопрос: как различить, к примеру ":" и "Ж" клавиши-то одни, раскладка разная!
Ну, еще есть куча решений со всплывающими подсказками "вы ввели неправильный символ", но они в данном случае не подходят..

Вопрос: может, кто знает нормальное решение этой задачи?

З.Ы. Я точно видел на некоторых сайтах такие поля, куда недопустимые символы просто не вводятся (а не исчезают, появившись на секунду, как в случае приведенного выше решения). Но поди их теперь разыщи эти сайты..
 
 Top
alexspb
Отправлено: 08 Августа, 2010 - 14:16:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




замените onkeyup на onblur
(Добавление)
Для нормальных пользователей должно быть достаточно предупреждения о недопустимых символах + onblur вырезать лишнее

Для роботов и хитрых пользователей - все-равно проверка на стороне сервера


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
Bertolomych
Отправлено: 08 Августа, 2010 - 19:30:10
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Да-да. На худой конец я именно так и собирался сделать.
Но все-таки, простота подхода, когда ненужные символы просто не вводятся, по сравнению со всякими подсказками.. такая желанная! Улыбка
 
 Top
JustUserR
Отправлено: 09 Августа, 2010 - 03:09:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Bertolomych пишет:
Но у этого решения есть один существенный недостаток: если ввести строку, а потом попытаться отредактировать ее середину, то ничего не выйдет - при нажатии клавиши, курсор смещается в конец строки, и именно там и вводит символ
Для того чтобы осуществлять динамическую обработку данных вводимых в текстовое поле на основе регулярного выражения определяющего шаблон допустимых символов - необходимо добавить предварительное сохранение текущей позиции курсора и его возвращения в исходное положение после произведения фильтрации Так как механизмы получения и установки позиции курсора в различных браузерах отличаются - из-за того что в них имеется различный принцип работы и программное взаимодейсвие с объектом текущего выделения - то необходимо использовать универсальную кросс-браузерную функцию описанную например здесь http://kurilka[dot]co[dot]ua/archives/getcaretpos/ Далее вам будет необходимо только несколько модифицировать текущий механизи фильтрации - а именно добавить в него получение и установку положения курсора в соответсвующий момент времени Кроме того следует выделить JS-код из on_event-блока в отдельную функцию и использовать именно ее вызов в возможной передачей текущего DOM-объекта - это нужно для избежания синтаксических ошибок связанных с различием уровней экранирования HTML и JS-кода


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Bertolomych
Отправлено: 09 Августа, 2010 - 04:15:17
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Ого! Ничего себе "простое элегантное решение"! Улыбка
Спасибо, будем пробовать.
Эх.. они бы там еще описали как этот курсор потом на место вернуть.. В затруднении
 
 Top
JustUserR
Отправлено: 10 Августа, 2010 - 03:13:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Bertolomych пишет:
Ого! Ничего себе "простое элегантное решение"!
Спасибо, будем пробовать.
Эх.. они бы там еще описали как этот курсор потом на место вернуть..
Пожалуйста! На самом деле данное решение несмотря на достаточный объем используемого JS-кода является достаточно простым - ведь в нем используются обычные JS-объекты для управления курсором внутри текстового поля - и события взаимодействия с ним на основе возникновеня которых происходит обработка Тем не менее можно использовать и более сложный метод заключающийся в создании и программировании собственного элемента управления для текстового поля - а вместе с ним и описание динамического взаимодейтсвия с ним и эффективного рендеринга
Что касается функции для установки курсора в некоторую позицию - можете посмотреть это решение http://jscript[dot]ru/archives/60


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB