正则表达式使用Javascript

问题描述 投票:3回答:2

我正在尝试创建一个从电话号码字段中删除某些字符的功能。到目前为止,我已经删除了(321) 321-4321中的括号,空格和连字符。另外,我删除了321.321.4321中的点。最后,我已经验证了11位数字,并且即使用标点符号也从1开始。

我输入的代码:

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

我现在试图让它在某些情况下返回null,例如:

  • 当数字超过11位数
  • 当存在字母和/或标点符号时
  • 当区号不以2-9开头时
  • 当交换代码不以2-9开头时。

任何添加语句的尝试都会使我的原始函数无效。任何人都可以帮助我我是regex的新手,但我需要帮助吗?

javascript regex testing
2个回答
2
投票

简要

如果我理解正确,你想:

  • 从字符串中删除任何非数字字符
  • 获取长度为11位(或更少)的数字
  • 确保数字中的第一个和第四个数字在2-9范围内(所以不是0或1)

第一个正则表达式可以使用\D而不是[^\d],因为它们都意味着完全相同的东西。

第二部分可以使用以下任何一种方法(以及更多,但这些可能是一些最简单的方法):

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)

显然,你会将0改为你的最小数字要求(减去4);所以,如果你想要最低限度的9,你就会把{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));
});

1
投票

尝试如下使用.length来获取字符串中的字符

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.