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

12
Samail
На сайте с 10.05.2007
Offline
361
2702

Сейчас проверяется вот таким кодом:

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

alert( "Вы не указали цену" );
form.price.focus()
return false
}

Т.е. ошибка появляется только если поле price совсем пустое.

Как сделать, чтоб ошибка появлялась также, если:

1. В поле содержатся символы не являющиеся цифрами или точкой.

2. Цифр перед символом не являющимся цифрой, меньше 3-х. (и можно ли в текст сообщения об ошибке, вставить эти цифры).

T.R.O.N
На сайте с 18.05.2004
Offline
314
#1

1. if(form.price.value * 1 < 1) или if(parseFloat(form.price.value)). Второй вариант имеет некоторые недостатки

2. есть вопрос, может ли быть ситуация, что строка будет иметь вид 021abc ?

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
[Удален]
#2

или


var regEx = /[0-9\.]{3,}/;
if (!form.price.value.match(regEx)) {
// вычисляем form.price.value.langth. Если меньше 3, то мы не укладываемя по этому параметру
// если 3 и более, то в строке не нужные нам символы
return;
}
Samail
На сайте с 10.05.2007
Offline
361
#3
T.R.O.N:
может ли быть ситуация, что строка будет иметь вид Спасибо 021abc

Ну юзеры то ввести могут всё что угодно. Ноль перед цифрой конечно не стоит считать при подсчете цифр. Правильные варианты только: 1235 или 12345.10, в БД маска 0.00, т.е. если ввести 12,345 то в БД окажется только 12.00.

[Удален]
#4

тогда так

var regEx = /^[1-9]{1}[0-9\.]{2,}/;
+ проверка на то, что точка одна в строке.
Samail
На сайте с 10.05.2007
Offline
361
#5

So1, это проверка только по второму пункту или по обоим сразу? Нужна раздельная, чтоб сначала выдавалось сообщение, что вводить можно только цифры и точку, а потом уже проверять число цифр.

Samail добавил 29.06.2010 в 10:42

So1:
var regEx = /^[1-9]{1}[0-9\.]{2,}/;

Спасибо, но теперь если ввести 012345, то тоже выдается ошибка, можно сделать так, чтоб нули в начале числа, просто не учитывались?

T.R.O.N
На сайте с 18.05.2004
Offline
314
#6
Samail:
Спасибо, но теперь если ввести 012345, то тоже выдается ошибка, можно сделать так, чтоб нули в начале числа, просто не учитывались

все как и раньше.. число умножить на 1... лидирующие нули пропадут =)

[Удален]
#7

По обоим случаям сразу. Первый проверяется так:

var len = form.price.value.langth; if (len < 3) alert('В строке не может содержаться менее 3 символов');

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

var regEx = /^[0-9]+$/;

В этом случае, правда, можно будет ввести 000000, поэтому сначала лучше конечно, как сказал T.R.O.N, умножить на 1. Последовательность тогда должна быть такой:

1 Проверка на длину

2 *1

3 Проверка на символы

Если пункты 1 и 2 перепутать, пользователи будут недоумевать - "почему я ввел 00001 и у меня вдруг кол-во символов меньше 3"

Samail
На сайте с 10.05.2007
Offline
361
#8

Просто у меня была мысль такая: пользователь вводит 10 тыс., получает сообщение, что вводить можно только цифры. Убирает тыс. и забывает добавить 000, получает сообщение, что указанная цена нереально низкая.

Samail добавил 29.06.2010 в 11:48

So1:
пользователи будут недоумевать - "почему я ввел 00001

А можно как-то эту цифру умноженную на 1, вставить в середину текста об ошибке? Что бы получилось, что-то вроде: "Указанная цена - 22 руб., слишком низкая для данного вида товаров. Проверьте правильность ввода."

[Удален]
#9

Заводим контейнер вроде

<p id='errorContainer'></p>

Для проверки длины пишем функцию вроде:


var checkValue = function(str) {
var errorContainer = document.getElementById('errorContainer'); // получаем объект как элемент DOM
var realValue = form.price.value * 1; // избавились от нулей в начале
if (realValue.length < 3) {
errorContainer.innerHTML = 'Указанная цена - "+realValue+" руб., слишком низкая для данного вида товаров. Проверьте правильность ввода.';
return false;
}
else {
errorContainer.innerHTML = '';
}
return true;
}

И не забываем добавить для элемента ввода вот тут:

<input type='text' name='price' onkeyup='javascript: checkValue(this.value);'>

или

<input type='text' name='price' onkeyup='javascript: document.getElementById('errorContainer').innerHTML = "";'>
T.R.O.N
На сайте с 18.05.2004
Offline
314
#10
Samail:
Просто у меня была мысль такая: пользователь вводит 10 тыс., получает сообщение, что вводить можно только цифры. Убирает тыс. и забывает добавить 000, получает сообщение, что указанная цена нереально низкая.

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

1 - вы избавитесь от некоторых проблем

2 - заставите человека задуматься над тем что он вводит

12

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