Skip to content

Commit

Permalink
isRFC3339: Format implementation closer to spec for clarity
Browse files Browse the repository at this point in the history
  • Loading branch information
pietvanzoen committed Apr 18, 2018
1 parent 0717559 commit 5f1581d
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 10 deletions.
23 changes: 20 additions & 3 deletions lib/isRFC3339.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,26 @@ var _assertString2 = _interopRequireDefault(_assertString);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/* eslint-disable max-len */
var rfc3339 = /^[0-9]{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])[ tT]([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?([zZ]|[-+]([01][0-9]|2[0-3]):[0-5][0-9])$/;
/* eslint-enable max-len */
/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */

var dateFullYear = /[0-9]{4}/;
var dateMonth = /(0[1-9]|1[0-2])/;
var dateMDay = /([12]\d|0[1-9]|3[01])/;

var timeHour = /([01][0-9]|2[0-3])/;
var timeMinute = /[0-5][0-9]/;
var timeSecond = /([0-5][0-9]|60)/;

var timeSecFrac = /(\.[0-9]+)?/;
var timeNumOffset = new RegExp('[-+]' + timeHour.source + ':' + timeMinute.source);
var timeOffset = new RegExp('([zZ]|' + timeNumOffset.source + ')');

var partialTime = new RegExp(timeHour.source + ':' + timeMinute.source + ':' + timeSecond.source + timeSecFrac.source);

var fullDate = new RegExp(dateFullYear.source + '-' + dateMonth.source + '-' + dateMDay.source);
var fullTime = new RegExp('' + partialTime.source + timeOffset.source);

var rfc3339 = new RegExp(fullDate.source + '[ tT]' + fullTime.source);

function isRFC3339(str) {
(0, _assertString2.default)(str);
Expand Down
23 changes: 20 additions & 3 deletions src/lib/isRFC3339.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
import assertString from './util/assertString';

/* eslint-disable max-len */
const rfc3339 = /^[0-9]{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])[ tT]([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?([zZ]|[-+]([01][0-9]|2[0-3]):[0-5][0-9])$/;
/* eslint-enable max-len */
/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */

const dateFullYear = /[0-9]{4}/;
const dateMonth = /(0[1-9]|1[0-2])/;
const dateMDay = /([12]\d|0[1-9]|3[01])/;

const timeHour = /([01][0-9]|2[0-3])/;
const timeMinute = /[0-5][0-9]/;
const timeSecond = /([0-5][0-9]|60)/;

const timeSecFrac = /(\.[0-9]+)?/;
const timeNumOffset = new RegExp(`[-+]${timeHour.source}:${timeMinute.source}`);
const timeOffset = new RegExp(`([zZ]|${timeNumOffset.source})`);

const partialTime = new RegExp(`${timeHour.source}:${timeMinute.source}:${timeSecond.source}${timeSecFrac.source}`);

const fullDate = new RegExp(`${dateFullYear.source}-${dateMonth.source}-${dateMDay.source}`);
const fullTime = new RegExp(`${partialTime.source}${timeOffset.source}`);

const rfc3339 = new RegExp(`${fullDate.source}[ tT]${fullTime.source}`);

export default function isRFC3339(str) {
assertString(str);
Expand Down
23 changes: 20 additions & 3 deletions validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -1139,9 +1139,26 @@ function isISO8601(str) {
return iso8601.test(str);
}

/* eslint-disable max-len */
var rfc3339 = /^[0-9]{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])[ tT]([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]+)?([zZ]|[-+]([01][0-9]|2[0-3]):[0-5][0-9])$/;
/* eslint-enable max-len */
/* Based on https://tools.ietf.org/html/rfc3339#section-5.6 */

var dateFullYear = /[0-9]{4}/;
var dateMonth = /(0[1-9]|1[0-2])/;
var dateMDay = /([12]\d|0[1-9]|3[01])/;

var timeHour = /([01][0-9]|2[0-3])/;
var timeMinute = /[0-5][0-9]/;
var timeSecond = /([0-5][0-9]|60)/;

var timeSecFrac = /(\.[0-9]+)?/;
var timeNumOffset = new RegExp('[-+]' + timeHour.source + ':' + timeMinute.source);
var timeOffset = new RegExp('([zZ]|' + timeNumOffset.source + ')');

var partialTime = new RegExp(timeHour.source + ':' + timeMinute.source + ':' + timeSecond.source + timeSecFrac.source);

var fullDate = new RegExp(dateFullYear.source + '-' + dateMonth.source + '-' + dateMDay.source);
var fullTime = new RegExp('' + partialTime.source + timeOffset.source);

var rfc3339 = new RegExp(fullDate.source + '[ tT]' + fullTime.source);

function isRFC3339(str) {
assertString(str);
Expand Down
Loading

0 comments on commit 5f1581d

Please sign in to comment.