Demetri Bethel
Demetri Bethel

Reputation: 85

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:

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

Upvotes: 3

Views: 82

Answers (2)

ctwheels
ctwheels

Reputation: 22817

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));
});

Upvotes: 2

Nisal Edu
Nisal Edu

Reputation: 7591

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");
}

Upvotes: 1

Related Questions