есть поле с типом decimal(11,2), в поле поступают данные от юзера с ценой, юзер на дурака может добавить типа 11р20коп, 11,20, 11=20. Как лучше сделать для юзера: 1. ничего не проверять и не подправлять - майсквил сам все сделает, но юзер может попасть в непонятку. 2. проверить на соответствие регуляркой на только цифры и точку, в случае не соответствия вывести сообщение об ошибке что только цифры или цифры и разделитель точка. 3. добавить реплас запятой, знака равно(или любых пробельных символов) на точку и вывести сообщение об ошибке если пытаются добавить буквы вместо цифр 4. добавить реплас запятой, знака равно(или любых пробельных символов) на точку, реплас любых букв на ничего как лучше сделать?
я бы принимал в базу форматы с . - , типа 10.34 10-34 10,34 - проверял бы на соответствие регуляркой и приводил бы к децималу Всё что не соответствует - выводить сообщение об ошибке. И да - образец помогает
Есть правило которое звучит примерно так "пользователь должен совершать минимум телодвижений" (прочесть инструкцию о том как заполнять - это вообще самый плохой вариант) Соответственно, отсюда применительно к твоей задачи тебе желательно сделать следующее: 1. Не ограничивать (разумно) поле для ввода. 2. Самостоятельно сделать проверку того чего он туда записал. 3. Если он записал не то что надо, попытаться определить самому что он туда записал. Например требуем вводить дату, а пользователь может ввести дату кучей разных способов. По уму надо это отследить, затем трансформировать в тот вид который тебе нужен. 4. Если совсем фигню ввел, выдать сообщение (видное, человеко-понятное, с конкретным указание как исправить) - еще лучше это делать сразу и на этапе заполнения формы (см. асинхронные запросы), поскольку юзер еще в мозгу не потерял момент на котором он находится и ему проще исправить сейчас нежели потом чсмотреть что не так и разбираться. Вывод сообщений типа "поле заполнено не верно" - это бред, потому что первое что приходит на ум это вопрос "а как надо" -надо сразу и указать КАК. 5. Ну и конечно же перед записью в БД надо применить мускулескейпстринг от греха подальше. Все это конечно желательно, но если продукт коммерческий, то это просто обязательно, а то пользователи вынесут весь мозг. И будешь зарабатывать по одному "геморою" за каждый запуск подобного проекта.
Можно разделить поле на два инпута: один для рублей, второй для копеек. В обоих полях разрешены только цифры. Для копеек разрешено максимум две цифры.
для важной информации такой вариант не пройдёт. ИМХО, цена - это важная информация. Примеры: пользователь ввёл 1 000, а мы преобразуем intval-ом и получаем 1. пользователь ввёл 9,999.99 (американский стандарт), а мы преобразуем в 9.999 для тех полей, где могут возникнуть затруднения у пользователя намного удобнее, когда под полем находится пример заполнения, или во всплывающей подсказке при наведении на поле.
а как на счет так: 1. Сначала удалить пробелы (если они есть) 2. Потом ерегом на вид записи смотреть под какой она может попасть и уже соответсвенным образом изменить. 3. Если это поле точно цифровое, то посмотреть наличие символов НЕ цифр, если это цифры деньги, то не забыть особое внимание обратить на симыолы доллара, евро и рублей и тд. И самое главное если проверку делать по мере заполнения, то юзер сразу увидит если что вдруг не так исправилось. С одной стороны это гемор так писать, но если начать, то не так-то много и получается, получится путевая библиотечка обработки полей ввода, которая будет подходить под любую форму любого проекта.
я бы предложил сделать предварительную проверку на стороне клиента. начинает вводить буквы - показывать подсказку, что буквы низзя, вводит точку - говорить, что надо ставить запятую (если для русских программа). но и перед отправкой в базу не забыть проверить, мало ли какие хакеры есть.
Про подсказки. Безусловно они нужны. Но они должны выполнять функцию "если пользователь хочет разобраться как заполнить форму, то ему должно быть сразу понятно куда смотреть". Часто подсказки выглядят как реально инструкция для заполнения. Ваш вариант со всплывающим подсказками весьма хорош (ну я так по крайней мере делаю ).
А к стати про фразу: Ничерта он не сделает, такого бреда поназаписывает в БД. Плюс это дыра для скл инъекций. Поэтому техническая проверка любого обращения к БД (хоть на запись, хоть на чтение) должна быть проведена.
наверное проще на яваскрипте типа так: [js]var price = document.getElementById('price').value; priceTest = 'регулярка'; var regex = new RegExp(priceTest); if (!regex.test(price) && price != '') { document.getElementById('price').style.border = '1px solid #FF0000'; document.getElementById('price_error').innerHTML = 'не корректная цена, такие то рекомендации'; error = 1; }[/js] или джикавери плагины подключать что бы сразу давали данные юзеру до сабмита