Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Sezar_zp
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 5
1

Проверка полей на заполнение

24.03.2014, 14:18. Просмотров 2374. Ответов 7
Метки нет (Все метки)

Помогите решить задачу, я очень зеленый в этом деле а сроки жмут. Необходимо сделать проверку на заполнение полей таблицы:
- Колонку Дата на формат ДД.ММ.ГГГГ;
- Остальное на факт заполнения;
В случаи не выполнения условий - вывести на форму сообщение. Решить нужно именно на JavaScript. Мой вариант решения кривой до ужаса, проверяет только последнее поле (и возможно даже не на яве написан ). Заранее спасибо!!!!!


HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!--Указание типа документа-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
 
<html>
<head>
<title>HTML код таблицы</title>
</head>
 
<body>
 
<!--Настройка стиля таблици-->
<table border="1" cellspacing="1" cellpadding="0" style="background-color:#ffffff; color:#000000; font: bold 14px verdana;">
 
<!--Ячейки заголовки таблицы-->
<tr>
<th>Дата Вылета</th>
<th>Пункт вылета</th>
<th>Класс</th>
<th>Пункт прилета</th> 
</tr>
 
<!--Ячейки заполнения строка №1-->
<tr>
<td><input id="data_1" type="text"></td> 
<td><input id="punkt_vileta_1" type="text"></td>
 
<!--Ячейка с выпадающем меню-->
<td>    <select id="mymenu1" >
    <option></option>
    <option>VIP</option>
    <option>Бизнес</option>
    <option>Эконом</option>
    </select> 
</td>
<td><input id="punkt_prileta_1" type="text"> </td>
</tr>
 
<!--Ячейки заполнения строка №2-->
<tr>
<td><input id="data_2" type="text"></td>
<td><input id="punkt_vileta_2" type="text"></td>
<td>    <select id="mymenu2" >
    <option></option>
    <option>VIP</option>
    <option>Бизнес</option>
    <option>Эконом</option>
    </select> 
</td>
<td><input id="punkt_prileta_2" type="text"></td>
</tr>
 
</table>
 
<!--Кнопка и поле для поиска (Поле поиска очищаеться перед началом заполнения)-->
<input
 onblur="this.value=(this.value=='')?this.title:this.value;"
 onfocus="this.value=(this.value==this.title)?'':this.value;"
 value="Поиск..."
 title="Поиск..."
 type="text">
<button>Поиск</button>
 
 
 
 
 
 
 
<!--проверка заполнения-->
<br /><br /><br />
 
<div id="err"></div>
<input id="send" type="button" value="проверить" onclick="checkValue('data_1'); checkValue('punkt_vileta_1'); checkValue('mymenu1'); checkValue('punkt_prileta_1'); checkValue('data_2'); checkValue('punkt_vileta_2'); checkValue('mymenu2'); checkValue('punkt_prileta_2');">
 
<script>
    "use strict";
          function checkValue(id){
              var input = document.getElementById(id).value;
                document.getElementById('err').innerHTML = ''; 
              if (input ==""){
                  document.getElementById('err').innerHTML = 'Ошибка, поле пустое';
                  return false;
              }
          }
</script>
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 14:18
Ответы с готовыми решениями:

Вопрос по JavaScript (проверка на заполнение полей)
Здравствуйте. Сразу прошу прощения за, скорее всего, глупый вопрос, но в...

Автоматическое заполнение полей
Есть проблемка: На форме есть textbox1 в котором есть текст, по кнопке я...

Заполнение полей формы
При выборе подразделения организации, поля номера кабинета и телефона должны...

Заполнение полей на пустоту
Необходимо сделать проверку полей на заполнение. форма &lt;script...

Заполнение полей случайным значением
задача заключается в том, что бы поле &lt;input&gt; заполнить рандомно одним из 4...

7
newJS
2397 / 1070 / 307
Регистрация: 23.06.2011
Сообщений: 3,330
25.03.2014, 09:56 2
Лучший ответ Сообщение было отмечено Sezar_zp как решение

Решение

как сей чудо-код понял, так и сделал
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<table border="1" cellspacing="1" cellpadding="0" style="background-color:#ffffff; color:#000000; font: bold 14px verdana;" id="tab">
 
<!--Ячейки заголовки таблицы-->
<tr>
<th>Дата Вылета</th>
<th>Пункт вылета</th>
<th>Класс</th>
<th>Пункт прилета</th> 
</tr>
 
<!--Ячейки заполнения строка №1-->
<tr>
<td><input type="text" value="5.7.1234"></td> 
<td><input type="text" value=""></td>
 
<!--Ячейка с выпадающем меню-->
<td>    <select>
    <option>&nbsp;</option>
    <option>VIP</option>
    <option>Бизнес</option>
    <option>Эконом</option>
<option>На халяву</option>
    </select> 
</td>
<td><input type="text"></td>
</tr>
 
<!--Ячейки заполнения строка №2-->
<tr>
<td><input type="text" value="1q.2.3456"></td>
<td><input type="text"></td>
<td>    <select>
    <option>&nbsp;</option>
    <option>VIP</option>
    <option>Бизнес</option>
    <option>Эконом</option>
<option>На халяву</option>
    </select> 
</td>
<td><input type="text"></td>
</tr>
 
<tr>
<td><input type="text" value="1.2. 3455"></td>
<td><input type="text"></td>
<td>    <select>
    <option>&nbsp;</option>
    <option>VIP</option>
    <option>Бизнес</option>
    <option>Эконом</option>
<option>На халяву</option>
    </select> 
</td>
<td><input type="text"></td>
</tr>
 
</table>
 
<!--Кнопка и поле для поиска (Поле поиска очищаеться перед началом заполнения)-->
<input
 onblur="this.value=(this.value=='')?this.title:this.value;"
 onfocus="this.value=(this.value==this.title)?'':this.value;"
 value="Поиск..."
 title="Поиск..."
 type="text">
<button title="">Поиск</button>
 
<!--проверка заполнения-->
<br /><br /><br />
 
<div id="err"></div>
<input type="button" value="проверить" onclick="checkValue();">
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function checkValue(){
var m, k, el, c;
c="lavenderblush";
m=document.querySelectorAll("#tab td");
k=m.length;
while(k--){
el=m[k].querySelector("input, select");
s=el.value;
if(k%4===0){//все 1е ячейки, с индексом 0 в текущем ряду
if(/\d{1,2}\.\d{1,2}\.\d{4}/.test(s)){el.style.backgroundColor=""}
else{el.style.backgroundColor=c}};
 
if(k%4===1||k%4===3){//все 2е и 4е ячейки, с индексом 1 и 3 в текущем ряду
if(s.replace(/\s/g, "").length>0){el.style.backgroundColor=""}
else{el.style.backgroundColor=c}};
 
if(k%4===2){//все 3е ячейки, с индексом 2 в текущем ряду
if(el.options.selectedIndex){el.style.backgroundColor=""}
else{el.style.backgroundColor=c}}};
 
 };


Как улучшить, если это кому то нужно.
Дату нужно проверять более полно, чтобы число входило в диапазон 1-31, чтобы число соответствовало месяцу, чтобы високосный год соответствовал, и год как то проверять, для этого нужно знать какие годы можно.
Поля "Я улетел", "А Я залетела", тоже можно проверить более точно, например по наличию некоторых ключевых слов, а не просто наличие символов, ведь можно просто буковку зажать.


P.S.
Vovan-VE, а число и месяц можно регуляркой увязать? чистой регуляркой!
1
Sezar_zp
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 5
25.03.2014, 12:51  [ТС] 3
Супер, я даже код понял, кучу примеров в инете перебрал - казалось темным лесом.

Нужно реализовать вывод текстового сообщения на форму что произошла ошибка, сделал так:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    function checkValue(){
        var m, k, el, c, i;
        c="lavenderblush";
        m=document.querySelectorAll("#tab td");
        k=m.length;
        while(k--){
        el=m[k].querySelector("input, select");
        s=el.value;
    if(k%4===0){//все 1е ячейки, с индексом 0 в текущем ряду
    if(/\d{1,2}\.\d{1,2}\.\d{4}/.test(s)){document.getElementById('err').innerHTML = ''}
    else{document.getElementById('err').innerHTML = 'Ошибка! Заполните таблицу согласно условию.'}};
 
    if(k%4===1||k%4===3){//все 2е и 4е ячейки, с индексом 1 и 3 в текущем ряду
    if(s.replace(/\s/g, "").length>0){document.getElementById('err').innerHTML = ''}
    else{document.getElementById('err').innerHTML = 'Ошибка! Заполните таблицу согласно условию.'}};
 
    if(k%4===2){//все 3е ячейки, с индексом 2 в текущем ряду
    if(el.options.selectedIndex){document.getElementById('err').innerHTML = ''}
    else{document.getElementById('err').innerHTML = 'Ошибка! Заполните таблицу согласно условию.'}}};
            };
Но в таком варианте логика хромает, получается что при наличии хотя бы одного заполоненного поля - проверка пройдет как успешная.

Сделал так... по логике все правильно, но в силу моих знаний в яве не работает, скорее всего я грубо натупил с лексикой код.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function checkValue(){
        var m, k, el, c, i;
        i==0;
        c="lavenderblush";
        m=document.querySelectorAll("#tab td");
        k=m.length;
        while(k--){
        el=m[k].querySelector("input, select");
        s=el.value;
    if(k%4===0){//все 1е ячейки, с индексом 0 в текущем ряду
    if(/\d{1,2}\.\d{1,2}\.\d{4}/.test(s)){el.style.backgroundColor=c}
    else{i=i+1}};
 
    if(k%4===1||k%4===3){//все 2е и 4е ячейки, с индексом 1 и 3 в текущем ряду
    if(s.replace(/\s/g, "").length>0){el.style.backgroundColor=c}
    else{i=i+1}};
 
    if(k%4===2){//все 3е ячейки, с индексом 2 в текущем ряду
    if(el.options.selectedIndex){el.style.backgroundColor=c}
    else{i=i+1}}
 
    if(i==0){document.getElementById('err').innerHTML = ''}
    else{i>0).innerHTML = 'Ошибка! Заполните таблицу согласно условию.'}}   
            };
        };
0
Vovan-VE
25.03.2014, 15:03
  #4

Не по теме:

Цитата Сообщение от newJS Посмотреть сообщение
а число и месяц можно регуляркой увязать? чистой регуляркой!
29-е февраля, будь оно неладно. Чтобы узнать, високосный ли год, нужно вычислять остаток от деления. :pardon: . Хотя, с другой стороны, признаки делимости на 4, 100 и 400 в принципе можно и описать регяляркой, но длина её, пожалуй, будет обратно пропорциональна оправданности.

0
newJS
2397 / 1070 / 307
Регистрация: 23.06.2011
Сообщений: 3,330
25.03.2014, 17:40 5
i==0; - это не присвоение, а проверка с приведением типов, или не строгая проверка
присвоение это одно равно

проверка пишется не так
Javascript
1
2
if(i==0){}
    else{i>0)
а так
Javascript
1
2
if(i==0){делаем если равно}
else{делаем если не равно};
переменную i замени на f(flag) и присвой ей
Javascript
1
f=false;
и добавь к строке
Javascript
1
el.style.backgroundColor=c[COLOR="Red"]; f=true[/COLOR]
проверяем так
if(f){ошибка};
что получим
если хотя бы одна проверка не пройдет, это поле подкрасится и будет флаг изменен, а на выходе проверим этот флаг

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function checkValue(){
var m, k, el, c, f;
f=false;
c="lavenderblush";
m=document.querySelectorAll("#tab td");
k=m.length;
while(k--){
el=m[k].querySelector("input, select");
s=el.value;
if(k%4===0){//все 1е ячейки, с индексом 0 в текущем ряду
if(/\d{1,2}\.\d{1,2}\.\d{4}/.test(s)){el.style.backgroundColor=""}
else{el.style.backgroundColor=c; f=true}};
 
if(k%4===1||k%4===3){//все 2е и 4е ячейки, с индексом 1 и 3 в текущем ряду
if(s.replace(/\s/g, "").length>0){el.style.backgroundColor=""}
else{el.style.backgroundColor=c; f=true}};
 
if(k%4===2){//все 3е ячейки, с индексом 2 в текущем ряду
if(el.options.selectedIndex){el.style.backgroundColor=""}
else{el.style.backgroundColor=c; f=true}}};
 
el=document.getElementById('err');
if(f){el.innerHTML="Ошибка! Заполните таблицу согласно условию."}
else{el.innerHTML=""};
 
 };
а зачем функцию поломал? зачем повыбрасывал, думаешь она будет правильно работать после такого варварства?




Цитата Сообщение от Vovan-VE Посмотреть сообщение
Чтобы узнать, високосный ли год, нужно вычислять остаток от деления.
кому интересно полностью, смотрите тут
http://ru.wikipedia.org/wiki/%D0%92%...B3%D0%BE%D0%B4

Цитата Сообщение от Vovan-VE Посмотреть сообщение
но длина её, пожалуй, будет обратно пропорциональна оправданности.
хотелось бы понять как это вообще можно сделать, а то я и не понял как к этому подступиться, ежели будет настроение и время...., я понятно намекнул?



вот такое слепил ради интереса, вроде правильно, но сильно не тестил
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
onload=function(){
var v, f, m;
m={1:31, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31};
v=d.getElementById("ddd").value;
f=false;
//если не проходит тест, значит так или иначе нарушен синтаксис строки
if(/^(?:[1-9]|[12]\d|3[01])\.(?:[1-9]|1[012])\.\d{4}$/.test(v)){
//соответствие числа месяцу, чтобы не было 30 февраля, 31 апреля
f=v.replace(/(\d{1,2})\.(\d{1,2})\.(\d{4})/, function(a, b, c, e){
return c==2?e%4===0?29>=b?true:false:28>=b?true:false:m[c]>=b?true:false})};
alert(f);
 
 };
1
Sezar_zp
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 5
25.03.2014, 17:55  [ТС] 6
Спасибо огромное, работает лучше чем я ожидал =)

За пояснения отдельное спасибо, по хорошему нужно было инструкциями обложиться и людей не трогать.

по поводу варварства только анекдот вспоминается. =)
Кликните здесь для просмотра всего текста

Сын спрашивает отца программиста:
Сын: Пап а почему солнце всходит и заходит?
Папа: Сынок, работает - не трогай...
0
Vovan-VE
26.03.2014, 14:45
  #7

Не по теме:

Цитата Сообщение от newJS Посмотреть сообщение
хотелось бы понять как это вообще можно сделать, а то я и не понял как к этому подступиться
Делимость на 4 очень просто проверить. Если две последние цифры составляют число, которое делится на 4, то и всё число делится на 4:
n == a * 100 + b
А все двузначные числа, делящиеся на 4, можно разбить на две группы: с четным и с нечетным количеством десятков:

00, 04, 08,12, 16,
20, 24, 2832, 36,
40, ... 

Т.е. последние две цифры числа должны быть:
Javascript
1
/(?:[02468][048]|[13579][26])/
Это только делимость на 4.
С делимостью на 100 проблем нет: в конце два нуля.
Делимость на 400 — это совмещение двух предыдущих пунктов.

Осталось только собрать части воедино. Ладно хоть (?!...) в JS есть, и на том спасибо.

0
newJS
2397 / 1070 / 307
Регистрация: 23.06.2011
Сообщений: 3,330
26.03.2014, 21:36 8
Vovan-VE, спасибо, а где кнопки? куда кнопка со спасибками делась, да и другие тоже? и все прочие что под ником в левой колонке было?
1
26.03.2014, 21:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 21:36

Заполнение полей формы на другой странице
Такая проблема. есть 2 html страницы. нужно считать значение текстового поля с...

Проверка полей
В общем вопрос такой есть поля input тип number данные из них обновляются в БД...

Проверка заполнения полей
Здравствуйте. Нужен скрипт для проверки заполнения обязательных полей. То что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru