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

12
Samail
На сайте с 10.05.2007
Offline
369
#11
T.R.O.N:
дабы немного усмирить человеческий фактор, далаете поле ввода а рядом выпадающий список с единицы/тысячи/миллионы.....

Тогда будет проблема в том, чтоб, БД попадала введенная сумма умноженная на 1, 1000, 1000000 в зависимости от того, что человек выбрал. К тому-же человеку придется ломать голову, как ввести 3 млн. 253 тыс. 553 руб.

So1:
Заводим контейнер вроде
Код HTML:

Тут я совсем запутался :)

А при варианте:

else

var regEx = /^[1-9]{1}[0-9\.]{2,}/;
if (!form.price.value.match(regEx)) {
alert( "Цена указана с ошибкой, проверьте правильность ввода данных" );
form.price.focus()
return false

} else if...
Не получится в текст ошибки значение "form.price.value * 1" вставить?

...тут вот ещё что, при таком варианте, если ввести 22.00, то тоже добавляется.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#12
Samail:
Тогда будет проблема в том, чтоб, БД попадала введенная сумма умноженная на 1, 1000, 1000000 в зависимости от того, что человек выбрал.

это не прблема

Samail:
Не получится в текст ошибки значение "form.price.value * 1" вставить?

не понимаю в чем проблема?

Samail:
...тут вот ещё что, при таком варианте, если ввести 22.00, то тоже добавляется.

так надо перестать длину проверять, три знака как я понял, это 100, ну так и проверять на то что введенное число parseFloat(str) > 99

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
Samail
На сайте с 10.05.2007
Offline
369
#13
T.R.O.N:
не понимаю в чем проблема?

В том, что у меня не получается это сделать.

Вот что в итоге получилось:

if (form.price.value == ""){

alert( "Поле цена, должно быть заполнено" );
form.price.focus()
return false
} else

var regEx1 = /^[0-9\.\ ]+$/;
if (!form.price.value.match(regEx1)) {
alert( "В поле цена, должны содержаться только цифры." );
form.price.focus()
return false

} else
if(form.type.value == "1" && form.price.value * 1 < 10000) {
alert( "Указана слишком низкая цена для продажи недвижимости. Проверьте правильность ввода." );
form.price.focus()
return false

} else
if(form.type.value == "2" && form.price.value * 1 < 100) {
alert( "Указана слишком низкая цена. Проверьте правильность ввода." );
form.price.focus()
return false

} else
var regEx = /^[1-9]{1}[0-9\.]{2,}/;
if (!form.price.value.match(regEx)) {
alert( "Цена указана с ошибкой, проверьте правильность ввода данных" );
form.price.focus()
return false

}

Уже много опечаток отсекается. Только вот если ввести 1.000.000 или 1.000 000, то такой вариант проходит, а в БД попадает 1.00.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#14
Samail:
Уже много опечаток отсекается. Только вот если ввести 1.000.000 или 1.000 000, то такой вариант проходит, а в БД попадает 1.00.

А это уже начало ИИ. Вы хотите чтобы программа могла догадаться о том, что хотел ввести юзер... не мудрите. точка - это разделитель целой и дробной части... и если юзер этого не понимает - заставьте его это понять. от цифр и букв мы пришли к полному бреду - 1.000.000. Вот скажите, кто так будет вводить? так можно только копипастить...

Если у вас не может быть дробной части, то просто удалите из строки все, что не является цыфрами form.price.value.replace(/[., -+*]/ig, ""); или form.price.value.replace(/[*\D]/ig, "");

Samail
На сайте с 10.05.2007
Offline
369
#15
T.R.O.N:
Если у вас не может быть дробной части, то просто удалите из строки все, что не является цыфрами

Скрипт предусматривает одну точку, более того, если ввести 1000 в БД цифра будет в виде 1000.00 и при редактировании существующего объявления, в поле с ценой, загружается именно 1000.00. В общем, просто запретить точку нельзя, иначе при редактировании, каждый раз цену править придется.

T.R.O.N
На сайте с 18.05.2004
Offline
314
#16
Samail:
Скрипт предусматривает одну точку, более того, если ввести 1000 в БД цифра будет в виде 1000.00 и при редактировании существующего объявления, в поле с ценой, загружается именно 1000.00.

а что мешает перед выводом все приводить в нормальный вид, без точек?

[Удален]
#17

ваша проблема в том что вы чересчур лояльны к пользователю :) Сделайте просто - только цифры, начинается не с нуля, а уже в скрипте, который получает данные, можете сделать более крутую проверку. Еще ваша проблема в том, что вы слабо знаете js и я не удивлюсь если и сервер-сайд язык.

Уже много опечаток отсекается. Только вот если ввести 1.000.000 или 1.000 000, то такой вариант проходит, а в БД попадает 1.00.

Я же писал, что нужно делать проверку на то, одна ли точка. Напишите функцию на скорую руку типа

var symbCnt = function (symb, str) { var cnt = 0; for ($i=0;$i<str.length; $i++) { if (str[$i] == symb) cnt++; }  return cnt; } 

минута. даже меньше. и можно использовать так:

if (symbCnt('.', moneyAmountString) > 1) alert('Разделительная точка должна быть только одна и должна отделять меньший порядок');

Конечно, сообщение об ошибке у вас будет не таким, но... что то около того :)

минута :) даже меньше )

Не хотелось вам ссылку давать на jQuery, но все таки если очень хочется сделать любой формат, то лучше использовать jquery и плагин http://www.meiocodigo.com/projects/meiomask/

См демки: http://www.meiocodigo.com/projects/meiomask/#mm_demos

Samail
На сайте с 10.05.2007
Offline
369
#18
T.R.O.N:
а что мешает перед выводом все приводить в нормальный вид, без точек?

Так и сделал.

So1:
Сделайте просто - только цифры, начинается не с нуля

Оставил только цифры и пробелы т.к. если юзер оставит пробел после цифр, потом будет долго гадать, что там скрипту не нравится.

So1:
Еще ваша проблема в том, что вы слабо знаете js и я не удивлюсь если и сервер-сайд язык.

"сервер-сайд язык" я знаю на уровне - "а что это?" :)

[Удален]
#19
Samail:
"сервер-сайд язык" я знаю на уровне - "а что это?" :)

хехе :) Ну вот JavaScript - клиент-сайд (client-side), потому что исполняет javascript сам браузер, а PHP, Perl и иже с ними - сервер-сайд (server-side) ЯП, потому что скрипты, написанные на них, исполняются на сервере.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий