Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex using Javascript

I am trying to create a function that would remove certain characters from a phone number field. So far I have removed parenthesis, spaces, and hyphens as in (321) 321-4321. Also, I removed dots as in 321.321.4321. Lastly, I have validated when 11 digits and starting with 1 even with punctuation.

The code I input:

function phoneNumber(){
   var number = '(321) 321-4321';
   number = number.replace(/[^\d]/g, '');
   return number;
}

I am now trying to have it return null for certain situations like:

  • When the number exceeds 11 digits
  • When letters and/or punctuation are present
  • When the area code does not start with 2-9
  • When the exchange code does not start with 2-9.

Any attempt to add a statement invalidates my original function. Can anyone help me I am new to regex, but I need help?

like image 833
Demetri Bethel Avatar asked Mar 06 '26 08:03

Demetri Bethel


2 Answers

Brief

If I understand correctly, you want:

  • To remove any non-digit characters from the string
  • To get numbers that are 11 digits in length (or less)
  • To ensure the first and fourth digits in the number are in the range 2-9 (so not 0 or 1)

Code

The first regex can use \D instead of [^\d] as they both mean the exact same thing.

The second part can use any of the following methods (and more, but these are probably some of the simplest methods):

Regex and .length

/^[2-9]\d{2}[2-9]/.test(number) && number.length <= 11

var numbers = [
  '(321) 321-4321', 
  '321.321.4321', 
  '123.456.7890',
  '321.123.4567',
  '(321) 321-4321-321'
];

function phoneNumber(number){
   number = number.replace(/\D/g, '');
   if(/^[2-9]\d{2}[2-9]/.test(number) && number.length <= 11) {
     return number;
   }
   return null;
}

numbers.forEach(function(number){
  console.log(phoneNumber(number));
});

charAt, regex and length

!/[01]/.test(number.charAt(0)) && !/[01]/.test(number.charAt(3)) && number.length <= 11

var numbers = [
  '(321) 321-4321', 
  '321.321.4321', 
  '123.456.7890',
  '321.123.4567',
  '(321) 321-4321-321'
];

function phoneNumber(number){
   number = number.replace(/\D/g, '');
   if(!/[01]/.test(number.charAt(0)) && !/[01]/.test(number.charAt(3)) && number.length <= 11) {
     return number;
   }
   return null;
}

numbers.forEach(function(number){
  console.log(phoneNumber(number));
});

Regex (alone)

Obviously, you'd change 0 to whatever your minimum digits requirements are (minus 4); so if you want a minimum of 9, you'd put {5,7}.

/^[2-9]\d\d[2-9]\d{0,7}$/.test(number)

var numbers = [
  '(321) 321-4321', 
  '321.321.4321', 
  '123.456.7890',
  '321.123.4567',
  '(321) 321-4321-321'
];

function phoneNumber(number){
   number = number.replace(/\D/g, '');
   if(/^[2-9]\d\d[2-9]\d{0,7}$/.test(number)) {
     return number;
   }
   return null;
}

numbers.forEach(function(number){
  console.log(phoneNumber(number));
});
like image 67
ctwheels Avatar answered Mar 08 '26 21:03

ctwheels


Try as follows use .length to get characters in string

var number = '(321) 321-4321';
number = number.replace(/[^\d]/g, '');
console.log(number)

if (number.length > 11) {
  console.log("null");
} else {
  console.log(number.length);
}


if (number.match(/[a-z]/i)) {
  console.log("alphabet letters found");
} else {
  console.log("alphabet letters not found");
}
like image 36
Nisal Edu Avatar answered Mar 08 '26 21:03

Nisal Edu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!