Как я могу проверить, передает ли пользователь допустимую дату в JavaScript?

, В то время как каждый сгенерированный GUID, как гарантируют, не будет уникален, общее количество уникальных ключей (2 128 глоток> или 3.4Г — 10 38 глоток>) является столь большим, что вероятность того же числа, сгенерированного дважды, является очень маленькой. Например, рассмотрите заметную вселенную, которая содержит о 5Г — 10 22 глоток> звезды; каждая звезда могла тогда иметь 6.8Г — 10 15 глоток> универсально уникальные GUID.

От Википедия .

Это некоторые хорошие статьи о том, как GUID сделан (для.NET) и как Вы могли получить тот же гуид в правильной ситуации.

https://ericlippert.com/2012/04/24/guid-guide-part-one /

https://ericlippert.com/2012/04/30/guid-guide-part-two /

https://ericlippert.com/2012/05/07/guid-guide-part-three /

†"вЂ"

5
задан MrM 2 July 2009 в 12:49
поделиться

5 ответов

взгляните на эту библиотеку date.js http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js

у него есть полезная функция под названием fromString , которая попытается и преобразовать строку (на основе Date.format) в допустимый объект даты.

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

вот несколько примеров форматов, которые вы можете протестировать:

Date.format = 'dd mmm yyyy';
alert(Date.fromString("26 Jun 2009"));

Date.format = 'mmm dd yyyy';
alert(Date.fromString("Jun 26 2009"));

Date.format = 'dd/mm/yy';
alert(Date.fromString("26/06/09"));

Date.format = 'mm/dd/yy';
alert(Date.fromString("06/26/09"));

Date.format = 'yyyy-mm-dd';
alert(Date.fromString("2009-06-26"));

Джош

9
ответ дан 18 December 2019 в 09:09
поделиться

Анализировать даты в произвольном формате (как указывает @Natrium) - ужасно сложная проблема. Это еще более сбивает с толку, если учесть, что европа записывает свои даты как дд / мм / гггг, поэтому вы не можете сказать, 7 февраля 2009 г. - 7 февраля или 2 июля.

Большинство людей решают эту проблему, используя либо datepicker тип управления из библиотеки javascript или с помощью раскрывающихся списков с заданными значениями для месяца, дня и года.

<select name="month">
<option value="1">January</option>
<option value="2">February</option>
...
<option value="12">December</option>
</select>

<select name="day">
<option value="1">1</option>
<option value="2">2</option>
...
<option value="31">31</option>
</select>

<select name="year">
<option value="2000">2000</option>
<option value="2001">2001</option>
...
<option value="2009">2009</option>
</select>
4
ответ дан 18 December 2019 в 09:09
поделиться

Вы можете использовать регулярное выражение или собственный код. Пример ниже:

function isValidDate(dateStr, format) {
   if (format == null) { format = "MDY"; }
   format = format.toUpperCase();
   if (format.length != 3) { format = "MDY"; }
   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || _
      (format.indexOf("Y") == -1) ) { format = "MDY"; }
   if (format.substring(0, 1) == "Y") { // If the year is first
      var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
      var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
   } else if (format.substring(1, 2) == "Y") { // If the year is second
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
   } else { // The year must be third
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
   }
   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }
   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
   // Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") { var mm = parts[0]; } else _
      if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }
   if (format.substring(0, 1) == "D") { var dd = parts[0]; } else _
      if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }
   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else _
      if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }
   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
   if (parseFloat(dd) != dt.getDate()) { return false; }
   if (parseFloat(mm)-1 != dt.getMonth()) { return false; }
   return true;
}
2
ответ дан 18 December 2019 в 09:09
поделиться

независимо от формата?

это будет сложно ...

  • 2009/07/02 - допустимая дата
  • 02/07/09 также
  • 2- 7-09 также
  • 02-7-'09 также
  • второе июля 2009 г. -> также действительно
  • twee juli tweeduizend en negen -> также действительно (на голландском языке)

Все верно, но все в другом формате. Итак, вне зависимости от формата ... Я серьезно в этом сомневаюсь ...

3
ответ дан 18 December 2019 в 09:09
поделиться

Я понимаю, что мне нужно пройти проверку кода. Все это хорошие ответы, но они начинали усложняться. Я не хотел загонять себя в угол, поэтому выбрал альтернативный маршрут. Спасибо

0
ответ дан 18 December 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: