JSFiddle - React, Tailwind, and code Playground

HTML

<input id="date" type="text" maxlength="10">

JavaScript

var date = document.getElementById('date');

date.addEventListener('keypress', updateInput);
date.addEventListener('change', updateInput);
date.addEventListener('paste', updateInput);
date.addEventListener('keydown', removeText);
date.addEventListener('cut', removeText);

function updateInput(event) {
  event.preventDefault();
  var string = getString(event);
  var selectionStart = this.selectionStart;
  var selectionMiddle = this.selectionMiddle;
  var selectionEnd = this.selectionEnd;
  var selectionLength = selectionEnd - selectionStart;
  var sanitizedString = string.replace(/[^0-9]+/g, '');
  // Do nothing if nothing is added after sanitization
  if (sanitizedString.length === 0) {
  	return;
  }
  // Only paste numbers that will fit
  var valLength = date.value.replace(/[^0-9]+/g, '').length;
  var availableSpace = 10 - valLength + selectionLength;
  // If `/` is selected it should not count as available space
  if (selectionStart <= 2 && selectionMiddle <= 2 && selectionEnd >= 3) {
  	availableSpace -= 1;
  }
  // Remove numbers that don't fit
  if (sanitizedString.length > availableSpace) {
  	sanitizedString = sanitizedString.substring(0, availableSpace);
  }
  var newCursorPosition = selectionEnd + sanitizedString.length - selectionLength;
  // Add one to cursor position if a `/` gets inserted
  if (selectionStart <= 2 && newCursorPosition >= 2) {
    newCursorPosition += 1;
  }
  if (selectionMiddle <= 2 && newCursorPosition >= 2) {
    newCursorPosition += 1;
  }
  // Previous input value before current cursor position
  var valueStart = date.value.substring(0, this.selectionStart);
  // Previous input value after current cursor position
  var valueEnd = date.value.substring(this.selectionEnd, date.value.length);
  var proposedValue = valueStart + sanitizedString + valueEnd;
	// Remove anything that's not a number
  var sanitized = proposedValue.replace(/[^0-9]+/g, '');
  format(sanitized);
  this.setSelectionRange(newCursorPosition,...