JSFiddle - React, Tailwind, and code Playground
HTML
<input type="text" data-validate="fullDate" placeholder="YYYY-MM-DD" />
JavaScript
var parser = function (input) {
var tokenStack = [];
var suggestions = [];
var suggestion;
var lookAhead;
if (input[0] === '/') input = input.slice(1, input.length - 1);
var i;
for (i = 0; i < input.length - 1; i++) {
lookAhead = input[i + 1];
switch (input[i]) {
case '(':
tokenStack.push('(');
break;
case '[':
tokenStack.push('[');
break;
case ')':
if (tokenStack[tokenStack.length - 1] === '(') {
tokenStack.pop();
if (tokenStack.length === 0) {
suggestion = generateSuggestion(input, i);
if (suggestion !== null) suggestions.push(suggestion);
}
} else throw 'bracket mismatch';
break;
case ']':
if (lookAhead === '{') {
while (input[i] !== '}')
i++;
}
if (tokenStack[tokenStack.length - 1] === '[') {
tokenStack.pop();
if (tokenStack.length === 0) {
suggestion = generateSuggestion(input, i);
if (suggestion !== null) suggestions.push(suggestion);
}
} else throw 'bracket mismatch';
break;
default:
if (tokenStack.length === 0) {
suggestion = generateSuggestion(input, i);
if (suggestion !== null) suggestions.push(suggestion);
}
break;
}
}
return suggestions;
}
var generateSuggestion = function (input, index) {
if (input[index].match(/[a-zA-Z\-\ \.:]/) !== null) return {
'regex': input.slice(0, index) + '$',
'suggestion': input[index]
};
else return null;
}
var library = {
fullDate: {
...