Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка ввода даты, Проверка ввода даты 
:(
    Опции темы
Гость_Андрей
  Дата 16.9.2004, 13:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











 Надо сделать проверку даты, которую пользователь вводит, т.е.  есть поле 
Код

<input type='text' size='40' maxlength='10' name='data' value=''>

и пользователь вводит туда дату в формате XX.XX.XXXX, например 27.03.2004 и надо сделать проверку такую как:
  • Введенно не меньше 10 символов (т.к. дата состоит из 10 символов)
  • Первые два символа даты (27) - числа а не текс, и при этом первый символ (по примеру унас цифра 2) входит в промежуток от 0 и до 4. А второй символ (по примеру у нас цифра 7) входит в промежуток от 0 до 9.
  • Третий и шестой символ строки должны быть . (точки)
  • Четвертый и пятый символ строки (03) - чмсла, а не текст, и приетом первое число может быть от 0 до 1, а второе от 0 до 9.
Помогите написать скрипт проверки ввода даты, он должен все учитывать, чтобы юзер не ввел корявую дату!!!
 smile  

Это сообщение отредактировал(а) Aliance - 22.8.2012, 09:26
  Вверх
Aliance
Дата 16.9.2004, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



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

Код

// проверка на то, что в поле не менее 10 символов, введены числа а не текст, допустимые цифры 0-31, допустимые символы - точки...
function isCorrect(elem) {
   var str = elem.value;
   var re = /\b^[0-31]{2}[.]{1}[12]{2}[.]{1}[0-9]{4}$\b/;
   if (!str.match(re)) {
       alert("Неккоректный формат даты!");
       setTimeout("focusElement('" + elem.form.name + "', '" + elem.name + "')", 0);
       return false;
   } else {
       return true;
   }
}

...

<input type="text" onchange="isCorrect(this)" />

Добавлено @ 14:39
Дабай разберем, что я написал:
Код
var re = /\b^[0-31]{2}[.]{1}[12]{2}[.]{1}[0-9]{4}$\b/;

Этой переменной мы и задаем рег. выр., далее "разжевываю" её синтаксис:
/ - начало р.в.
\b - начало границы
^ - начало слова
[0-31] - допустимы только цифры 0-31 при чем повторяться они будут {2} - 2 раза!
[.] - допустимо только точка при чем повторяться она будет{1} - 1 раз!
[12] - допустимы только цифры 0-12 при чем повторяться они будут {2} - 2 раза!
[.] - допустимо только точка при чем повторяться она будет{1} - 1 раз!
[0-9] - допустимы только цифры 0-9 при чем повторяться они будут {4} - 4 раза!
$ - конец слова
\b - конец границы
/ - конец р.в.

Это сообщение отредактировал(а) Aliance - 16.9.2004, 14:41
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 16.9.2004, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Aliance
Немного забыл, что 30 февраля и 31 апреля не бывает smile.gif да и 29 февраля только раз в 4 года
Добавлено @ 14:48

Вот ещё условия
- 1, 3, 5, 7, 8, 10, 12 месяцы имеют 31 день
- 4, 6, 9, 11 имеют по 30
- если год делится на 4 без остатка, то в феврале 29 дней, иначе 28

Это сообщение отредактировал(а) Red Dragon - 16.9.2004, 14:42


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Aliance
Дата 16.9.2004, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Red Dragon
Я не забывал этого, думаю в одном элементе input - невозможно. А вот если разбить на три: год, месяц, число...

Вот скрипт. он обходит все ошибки с числами:
Код


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>
<style type="text/css">
#calendar {position:absolute;
          left:0px;
          top:0px;
          visibility:hidden
         }
table {font-family:Verdana, Arial, Helvetica, sans-serif;
      background-color:#999999
     }
th {background-color:#ccffcc;
   text-align:center;
   font-size:10px;
   width:26px
  }
#tableHeader {background-color:#ffcccc;
             width:100%
            }
td {background-color:#ffffcc;
   text-align:center;
   font-size:10px
  }
#tableBody tr td {width:26px}
#today {background-color:#ffcc33}
a:link {color:#000000; text-decoration:none}
a:active {color:#000000; text-decoration:none}
a:visited {color:#000000; text-decoration:none}
a:hover {color:#990033; text-decoration:underline}
</style>
<script type="text/javascript">
/*******************
 ПОЛЕЗНЫЕ ФУНКЦИИ
********************/
// Первый день месяца
function getFirstDay(theYear, theMonth){
   var firstDate = new Date(theYear,theMonth,1);
   return firstDate.getDay();
}
// Дней в месяце
function getMonthLen(theYear, theMonth) {
   var nextMonth = new Date(theYear, theMonth + 1, 1);
   nextMonth.setHours(nextMonth.getHours() - 3);
   return nextMonth.getDate();
}

function getElementPosition(elemID) {
var offsetTrail = document.getElementById(elemID);
   var offsetLeft = 0;
   var offsetTop = 0;
   while (offsetTrail) {
       offsetLeft += offsetTrail.offsetLeft;
       offsetTop += offsetTrail.offsetTop;
       offsetTrail = offsetTrail.offsetParent;
   }
   if (navigator.userAgent.indexOf("Mac") != -1 &&
       typeof document.body.leftMargin != "undefined") {
       offsetLeft += document.body.leftMargin;
       offsetTop += document.body.topMargin;
   }
   return {left:offsetLeft, top:offsetTop};
}

// Позиционируем и показываем календарь
function showCalendar(evt) {
   evt = (evt) ? evt : event;
   if (evt) {
    if (document.getElementById("calendar").style.visibility != "visible") {
        var elem = (evt.target) ? evt.target : evt.srcElement;
        var position = getElementPosition(elem.id);
           shiftTo("calendar", position.left + elem.offsetWidth, position.top);
           show("calendar");
       } else {
           hide("calendar");
       }
   }
}

/************************
 ПРОРИСОВКА ТАБЛИЦЫ
*************************/
// очищаем и перестраиваем значение, основываясь на выборе
function populateTable(form) {
   // выводим выбор
   var theMonth = form.chooseMonth.selectedIndex;
   var theYear = parseInt(form.chooseYear.options[form.chooseYear.selectedIndex].text);
   // инициализируем зависимые параметры
   var firstDay = getFirstDay(theYear, theMonth);
   var howMany = getMonthLen(theYear, theMonth);
   var today = new Date();
   
   // Вставляем нужный год и месяц
   document.getElementById("tableHeader").innerHTML =
       form.chooseMonth.options[theMonth].text + " " + theYear;
   
   // Иниц. перем. для таблицы
   var dayCounter = 1;
   var TBody = document.getElementById("tableBody");
   // очишаем существующие строки
   while (TBody.rows.length > 0) {
       TBody.deleteRow(0);
   }
   var newR, newC, dateNum;
   var done=false;
   while (!done) {
       // Создаем новую строку
       newR = TBody.insertRow(TBody.rows.length);
       if (newR) {
           for (var i = 0; i < 7; i++) {
               // создаем новую колонку в конце строки
               newC = newR.insertCell(newR.cells.length);
               if (TBody.rows.length == 1 && i < firstDay) {
                   // пустые блоки
                   newC.innerHTML = "&nbsp;";
                   continue;
               }
               if (dayCounter == howMany) {
                   // прекращаем
                   done = true;
               }
               if (dayCounter <= howMany) {
                   if (today.getFullYear() == theYear &&
                       today.getMonth() == form.chooseMonth.selectedIndex &&
                       today.getDate() == dayCounter) {
                       newC.id = "today";
                   }
                   newC.innerHTML = "<a href='#'onclick='chooseDate(" +
                       dayCounter + "," + theMonth + "," + theYear +
                       "); return false;'>" + dayCounter + "</a>";
                    dayCounter++;
              } else {
                   newC.innerHTML = "&nbsp;";
               }
           }
       } else {
           done = true;
       }
   }
}

/*******************
 ИНИЦИАЛИЗАЦИЯ
********************/
// Создать динам. список годов
function fillYears() {
   var today = new Date();
   var thisYear = today.getFullYear();
   var yearChooser = document.dateChooser.chooseYear;
   for (i = thisYear; i < thisYear + 5; i++) {
       yearChooser.options[yearChooser.options.length] = new Option(i, i);
   }
   setCurrMonth(today);
}
// поставить выбираемый месяц
function setCurrMonth(today) {
   document.dateChooser.chooseMonth.selectedIndex = today.getMonth();
}

/*******************
  ВЫБОР
********************/
function chooseDate(date, month, year) {
   document.mainForm.date.value = date;
   document.mainForm.month.value = month + 1;
   document.mainForm.year.value = year;
   hide("calendar");
}

</script>
</head>

<body onload="fillYears(); populateTable(document.dateChooser)">

<form name="mainForm" id="mainForm" method="POST" action="">
<p>Введите дату:</p>
<p>мм:<input type="text" name="month" id="month" size="3" maxlength="2" value="1">
дд:<input type="text" name="date" id="date" size="3" maxlength="2" value="1">
гггг:<input type="text" name="year" id="year" size="5" maxlength="4" value="2003">
<input type="button" id="showit" value="Указать дату >>" onclick="showCalendar(event)">
</p>
</form>


<div id="calendar">
<table id="calendarTable" border=1>
<tr>
   <th id="tableHeader" colspan="7"></th>
</tr>
<tr><th>Вос</th><th>Пон</th><th>Вто</th><th>Сре</th>
<th>Чет</th><th>Пят</th><th>Суб</th></tr>
<tbody id="tableBody"></tbody>
<tr>
   <td colspan="7">
   <p>
   <form name="dateChooser">
       <select name="chooseMonth"
       onchange="populateTable(this.form)">
           <option selected>Январь<option>Ферваль
           <option>Март<option>Апрель<option>Май
           <option>Июнь<option>Июль<option>Август
           <option>Сентябрь<option>Октябрь
           <option>Ноябрь<option>Декабрь
   </select>
   <select name="chooseYear" onchange="populateTable(this.form)">
   </select>
   </form>
   </p>
   </td>
</tr>
</table>
</div>

</body>
</html>


Работает в NN, IE/WIN и IE/MAC. Для перетаскивания календаря - требуется отдельная библиотека, она огромна - писать не стал. Нужна будет - дам ссылку на свой сйт, где она есть...

Это сообщение отредактировал(а) Aliance - 16.9.2004, 16:03
PM MAIL WWW ICQ Skype   Вверх
GoodBoy
Дата 16.9.2004, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



возьми вот отсюда http://forum.vingrad.ru/index.php?showtopic=28182 скрипт календаря и будет тебя счастье!!!
:-))))))))))))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
od0201
Дата 21.8.2012, 22:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 16.1.2009

Репутация: нет
Всего: 1



тоже задался этим вопросом, вот что получилось
Код

<script> function Run () {
    var str = document.getElementById("bday").value;
    str=str.replace(/,/g, '.');
    str=str.replace(/^(\d[.-\/])/, '0$1');
    str=str.replace(/([.-\/])(\d[.-\/])/, '$10$2');
    str=str.replace(/([.-\/])(\d)$/, '$10$2');
    str=str.replace(/^(\d{2})\.(\d{2})\.(\d{4})$/, '$3-$2-$1');
    str=str.replace(/^(\d{4})\.(\d{2})\.(\d{2})$/, '$1-$2-$3');
    str=str.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, '$3-$1-$2');
    if (str!='' && ('Invalid Date'==new Date(str) || str.search(/^(\d{4})-(\d{2})-(\d{2})$/)==-1)){str='Invalid Date'}
    document.getElementById('newbday').innerHTML = str;   
    }    </SCRIPT>
<input  id='bday' type='text' value='01.06.2006'/ OnKeyUp="Run()" > <div  id='newbday'>...</div>

Я не большой знаток Javascript, поэтому если будет критика, буду только рад.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.