String methods are not my strong suit, I’ve been trying to manipulate an input field value that needs to be 24 characters long
- 21 of those characters are letters or numbers (no special characters other than dash)
- 3 of those fields are dashes in the 3rd, 8th, and 17th place
- I’ve got it working when 21 characters have been entered, but struggling to think through if a user adds more than 21 characters, or when a user add say, 30 characters, how do I only keep the first 21 entered & add dashes?
const caseNumberInput = document.querySelector(".theme--mobile #case_number");
caseNumberInput.addEventListener("blur", (e) => {
//get rid of all special characters other than "-"
const value = e.target.value.toUpperCase().replace(/[^a-zA-Z0-9 -]/g, "");
const length = e.target.value.replace(/[^a-zA-Z0-9 -]/g, "").length;
if (length === 21) {
//if length is 21, add the dashes in the 3rd, 8th, and 17th places
caseNumberInput.value = value.slice(0, 2)+ "-" + value.slice(2,6) + "-" + value.slice(6, 14)+ "-" + value.slice(14)
}
if (length >= 21) {
//remove the dashes then add them back so I don't get multipe dashes if they are already existing / keep only 21 characters?
let newValue = e.target.value.replace(/[^a-zA-Z0-9]/g, "").toUpperCase().slice(0, 21);
newValue.slice(0, 2)+ "-" + temp.slice(2,6) + "-" + value.slice(6, 14)+ "-" + value.slice(14);
caseNumberInput.value = newValue
console.log(newValue)
}
});
//keyup to remove any special characters except "-"
caseNumberInput.addEventListener('keyup', (e) => {
e.target.value = e.target.value.toUpperCase().replace(/[^a-zA-Z0-9 -]/g, "")
});