How to create a Phone Number field in forms also it must enter like this example: (xxx)-xxx-xxxx
Question
Question
Answer
You can definitely do a Single Line field with a Regular Expression to force the formatting. There's a couple ways to do the RegEx, but here's one that should match the format you listed.
\(\d\d\d\)\-\d\d\d\-\d\d\d\d
Here's some Javascript to spruce it up a little bit by adding placeholder text, this assumes your field(s) have a class name of phoneNumber:
$(document).ready(function () { $('.phoneNumber input').each(function() { $(this).attr('placeholder', '(123)-456-7890'); }); });
Here's an even more expanded version of the Javascript that also checks for common formats of the phone number, and replaces it to your format automatically.
$(document).ready(function () { //Add placeholder text to the phoneNumber field(s) when the form loads $('.phoneNumber input').each(function() { $(this).attr('placeholder', '(123)-456-7890'); }); //When the phoneNumber field(s) are changed, check for common formatting errors and update to standard format $('.phoneNumber input').change(function() { //automatically reformat if entered as 1234567890 if($(this).val().match(/\d\d\d\d\d\d\d\d\d\d/)) { $(this).val($(this).val().replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, "($1)-$2-$3")); } //automatically reformat if entered as (123)456-7890 else if($(this).val().match(/\(\d\d\d\)\d\d\d\-\d\d\d\d/)) { $(this).val($(this).val().replace(/\((\d\d\d)\)(\d\d\d)\-(\d\d\d\d)/, "($1)-$2-$3")); } //automatically reformat if entered as (123) 456-7890 else if($(this).val().match(/\(\d\d\d\)\s\d\d\d\-\d\d\d\d/)) { $(this).val($(this).val().replace(/\((\d\d\d)\)\s(\d\d\d)\-(\d\d\d\d)/, "($1)-$2-$3")); } //automatically reformat if entered as 123-456-7890 else if($(this).val().match(/\d\d\d\-\d\d\d\-\d\d\d\d/)) { $(this).val($(this).val().replace(/(\d\d\d)\-(\d\d\d)\-(\d\d\d\d)/, "($1)-$2-$3")); } //automatically reformat if entered as 123 456 7890 else if($(this).val().match(/\d\d\d\s\d\d\d\s\d\d\d\d/)) { $(this).val($(this).val().replace(/(\d\d\d)\s(\d\d\d)\s(\d\d\d\d)/, "($1)-$2-$3")); } //automatically reformat if entered as 123.456.7890 else if($(this).val().match(/\d\d\d\.\d\d\d\.\d\d\d\d/)) { $(this).val($(this).val().replace(/(\d\d\d)\.(\d\d\d)\.(\d\d\d\d)/, "($1)-$2-$3")); } $(this).parsley().validate(); }); });
Replies
This is an older question, and not as relevant for people using the new Forms designer, but for those using a classic designer I thought I would share. This is a function I use to automatically convert a 10-digit number entered in any format to our preferred format (xxx-xxx-xxxx, but you can change it to suit your preferences).
Note - the "most flexible option" for phone numbers that I put in the regex field is this:
^\(?\d{3}\)?[\-\s]?\d{3}[\-\s]?\d{4}$
It allows people to enter a 10-digit phone number in just about whatever format they're comfortable with, then the JS function converts it to the format we like.
$(document).ready(function() { // Set field regex validation to most flexible option above (in Layout designer) // establish regular expression to test in JS const phoneRegex = /\d{3}-\d{3}-\d{4}/gm; //phone # must match xxx-xxx-xxxx //Auto-format phone numbers $('.phone input').on('change',function(){ // extract all numbers var numbers = $(this).val().replace(/[^[0-9]/g,''); // If current input val does not match phoneRegex, but is 10 digits if (!phoneRegex.test($(this).val()) && numbers.length == 10){ // re-assemble the string with hyphens and set the value var formatPhone = numbers.substr(0,3) + '-' + numbers.substr(3,3) + '-' + numbers.substr(6,4); $(this).val(formatPhone).change(); }; }); });