Skip to content

Instantly share code, notes, and snippets.

@miwebguy
Created December 26, 2023 19:02
Show Gist options
  • Save miwebguy/22a3d4e81ba3e3f4c1a11cb8a28dbee7 to your computer and use it in GitHub Desktop.
Save miwebguy/22a3d4e81ba3e3f4c1a11cb8a28dbee7 to your computer and use it in GitHub Desktop.
Phone Number Formatting
<p>https://stackoverflow.com/questions/30058927/format-a-phone-number-as-a-user-types-using-pure-javascript</p>
<input id="phoneNumber" placeholder="Phone Number" maxlength="16" />
<script>
isNumericInput = (event) => {
const key = event.keyCode;
return ((key >= 48 && key <= 57) || // Allow number line
(key >= 96 && key <= 105) // Allow number pad
);
};
const isModifierKey = (event) => {
const key = event.keyCode;
return (event.shiftKey === true || key === 35 || key === 36) || // Allow Shift, Home, End
(key === 8 || key === 9 || key === 13 || key === 46) || // Allow Backspace, Tab, Enter, Delete
(key > 36 && key < 41) || // Allow left, up, right, down
(
// Allow Ctrl/Command + A,C,V,X,Z
(event.ctrlKey === true || event.metaKey === true) &&
(key === 65 || key === 67 || key === 86 || key === 88 || key === 90)
)
};
const enforceFormat = (event) => {
// Input must be of a valid number format or a modifier key, and not longer than ten digits
if(!isNumericInput(event) && !isModifierKey(event)){
event.preventDefault();
}
};
const formatToPhone = (event) => {
if(isModifierKey(event)) {return;}
// I am lazy and don't like to type things more than once
const target = event.target;
const input = event.target.value.replace(/\D/g,'').substring(0,10); // First ten digits of input only
const zip = input.substring(0,3);
const middle = input.substring(3,6);
const last = input.substring(6,10);
if(input.length > 6){target.value = `(${zip}) ${middle} - ${last}`;}
else if(input.length > 3){target.value = `(${zip}) ${middle}`;}
else if(input.length > 0){target.value = `(${zip}`;}
};
const inputElement = document.getElementById('phoneNumber');
inputElement.addEventListener('keydown',enforceFormat);
inputElement.addEventListener('keyup',formatToPhone);
</script>
For Dynamic forms, wrap addListener in a func, call on focus
function addCellListener()
{
const inputElement = document.getElementById('Cell');
inputElement.addEventListener('keydown',enforceFormat);
inputElement.addEventListener('keyup',formatToPhone);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment