JSFiddle - React, Tailwind, and code Playground
by sfoster
HTML
<p>
<input placeholder="mm/yy">
<span class="result"></span>
</p>
<p>
<input placeholder="mm / yy">
<span class="result"></span>
</p>
<p>
<input placeholder="mm/yyyy">
<span class="result"></span>
</p>
<p>
<input placeholder="mm / yyyy">
<span class="result"></span>
</p>
<p>
<input placeholder="mm/aa">
<span class="result"></span>
</p>
<p>
<input placeholder="format like so: mm aaaa">
<span class="result"></span>
</p>
<p>
<input placeholder="mm/aaaa">
<span class="result"></span>
</p>
<p>
<input placeholder="MM-YYYY">
<span class="result"></span>
</p>
<p>
<input placeholder=" mm - aaa">
<span class="result"></span>
</p>
<p>
<input placeholder="mmm/a">
<span class="result"></span>
</p>
<p>
<input placeholder="mm/a">
<span class="result"></span>
</p>
<p>
<input placeholder="mm/aaa">
<span class="result"></span>
</p>
JavaScript
// re1 = /^((?:[mM]{2}){1,2})(?:[\\-/\\\\]?)((?:[yYaA]{2}){1,2})$/;
let monthChars = "m";
let yearChars = "ya";
let reString = '(?:\\b|^)((?:[' + monthChars + ']{2}){1,2})(\\s?[\\-/\\\\]?\\s?)((?:[' + yearChars + ']{2}){1,2})(?:\\b|$)';
console.log(reString);
const re = new RegExp(reString, "i");
Array.from(document.querySelectorAll("p")).forEach(p => {
let resultElem = p.querySelector(".result");
let input = p.querySelector("input")
let placeholder = input.placeholder;
let results = re.exec(placeholder.trim());
resultElem.textContent = results ? [
results[1],
results[2],
results[3],
].join("") : " no match ";
});