Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Яваскрипт-проверка
 
 автор: Freddie_X   (27.02.2008 в 22:10)   письмо автору
 
 

У меня с Яваскриптом туговато, поэтому прошу вашей помощи, форумчане.
Нужно сделать проверку яваскриптом такого вида:
Есть текстовое поле и кнопка.
При нажатии кнопки мышкой (лино Энтером), идёт проверка на то, что в текстовом поле.
Разрешаются только цифры от 1 до 9, их должно быть 4, ни больше, ни меньше, а также они не могут повторяться (например, 1234-можно, 1225-нельзя).
Напишите код, пожалуйста!

   
 
 автор: CNTv2.0   (28.02.2008 в 01:13)   письмо автору
 
   для: Freddie_X   (27.02.2008 в 22:10)
 

<form name="myForm" onsubmit="return myFunc ()">
<input type="text" name="myText">
<input type="submit" value="Отправить">
</form>

<script>
function myFunc ()
{
function r () {alert ('Error'); document.forms.myForm.myText.select (); return false}
var t = document.forms.myForm.myText.value;
if (t.length != 4) return r (); else
if (t.replace (/\d/g, '').length) return r (); else
for (var a = '', s = t.split (''), j = 0; j < 4; j++)
if (a.indexOf (s [j]) < 0) a += '' + s [j];
if (a.length != 4) return r (); else
return true;
}
</script>

1. Если сообщений об ошибке не надо, то удалите первую строку function r () {alert ('Error'); document.forms.myForm.myText.select (); return false} вовсе, и все три return r (); замените на return false;

2. Если, наоборот, сообщения об ошибках хотите сделать более конкретными, тогда в первой строке function r () {alert ('Error'); ... замените на function r (x) {alert (x); ..., и во все три return r (); добавьте текст типа ошибки. Вот так (по очереди):
return r ('Недопустимая длина');
return r ('Недопустимые символы');
return r ('Недопустимые повторы');

   
 
 автор: Freddie_X   (28.02.2008 в 16:25)   письмо автору
 
   для: CNTv2.0   (28.02.2008 в 01:13)
 

Спасибо, работает, но...
Но единственное, скрипт не запрещает цифры 0.
А можно только 1-9. Нужно подправить немного.
Ещё, не могли бы вы объяснить строку if (t.replace (/\d/g, '').length), что в ней что значит. :)

   
 
 автор: Freddie_X   (29.02.2008 в 15:23)   письмо автору
 
   для: Freddie_X   (28.02.2008 в 16:25)
 

Пожалуйста! Ответьте кто-нибудь!!
Я понял, что
replace(/\d/g,'')

удаляет цифры все.
А вот как это работает в конструкции
if (t.replace (/\d/g, '').length)

??

   
 
 автор: CNTv2.0   (01.03.2008 в 00:16)   письмо автору
 
   для: Freddie_X   (29.02.2008 в 15:23)
 

Подправляю и комментирую:
<script>
//определяем глобальную функцию "Проверка поля формы" myFunc ()
function myFunc ()
{
//определяем локальную функцию "Ошибка" r (), которая сообщит о ней юзеру и не допустит сабмит формы
     function r () {alert ('Error'); document.forms.myForm.myText.select (); return false}

//вводим локальную переменную t, которая содержит строку из поля ввода
     var t = document.forms.myForm.myText.value;

//если длина строки (количество символов) не равно 4-м, то переход к функции "Ошибка"
     if (t.length != 4) return r (); else

//если длина строки после удаления из неё всех цифр отлична от нуля, то переход к функции "Ошибка"
     if (t.replace (/\d/g, '').length) return r (); else

//разбиваем строку на отдельные символы(уже только цифры) + 
//и из этих символов составляем новую строку, + 
//причём при составлении следим, чтобы каждый вновь добавляемый символ +
//не был включён в неё ранее и не был равен нулю
     for (var a = '', s = t.split (''), j = 0; j < 4; j++)
     if (a.indexOf (s [j]) < 0 && s [j] != 0) a += '' + s [j];

//проверяем длину новой строки, если она меньше 4-х, то переход к функции "Ошибка"
     if (a.length != 4) return r (); else

//если функция дошла до этого места, значит, всё в порядке - сабмит формы разрешаем
     return true;
}
</script>

   
 
 автор: Freddie_X   (01.03.2008 в 09:52)   письмо автору
 
   для: CNTv2.0   (01.03.2008 в 00:16)
 

Я уже решил эту задачку :) В принципе, мне было всё понятно, кроме той строки :)
Но всё равно спасибо!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования