mm.js 889 B

12345678910111213141516171819202122232425262728293031
  1. (() => {
  2. window.mm = (i, mask) => {
  3. const d = { 9: "[0-9]", a: "[a-z]" },
  4. msk = mask.split("");
  5. i.addEventListener("input", handler);
  6. i.addEventListener("focus", handler);
  7. function handler(e) {
  8. if (e.type == "focus" && i.value !== "") return;
  9. const mskd = [];
  10. let s = i.selectionStart - 1;
  11. msk.forEach((el, n) => {
  12. if (d[el]) {
  13. const t = new RegExp(d[el], "i").test(i.value.charAt(n));
  14. mskd.push(t ? i.value.charAt(n) : "_");
  15. if (t && s === n && i.value.charAt(n) !== "_") {
  16. s++;
  17. }
  18. } else {
  19. mskd.push(el);
  20. if (s === n) s++;
  21. }
  22. });
  23. i.value = mskd.join("");
  24. i.selectionStart = i.selectionEnd = s < 0 ? 0 : s;
  25. setTimeout(function () {
  26. i.selectionStart = i.selectionEnd = s < 0 ? 0 : s;
  27. }, 0);
  28. }
  29. };
  30. })();