字符串返回语句JS

时间:2017-07-18 04:39:35

标签: javascript conditional

我正在进行JS练习并且半工作但是当满足最后一个条件时它不会返回一个语句,只是一组空括号。我不太清楚为什么,但感谢任何帮助!

function isItANum(str) {
  var phonenum = str.replace(/[^0-9]+/g,"");

  if(str.length===11 && str.indexOf(0)===0) {
    str = str;

  } else if (str.match(/[a-z]/i)) {
    str = phonenum;

  } else {
    str = "Not a phone number";
  }

  return str;
}

isItANum("hey");

2 个答案:

答案 0 :(得分:2)

只需按顺序逐步完成计算。

首先,hey中没有数字,因此变量phonenum在到达str.replace(/[^0-9]+/g, "");时会被空字符串替换。

其次,检查长度是否为11,以及第一个字符是否为0。这失败了,所以它进入了else if

第三,hey与正则表达式/[a-z]/i匹配,因此str设置为phonenum

第四,str(现在phonenum)被返回,并且是一个空字符串。

要实际返回"Not a phone number",只需完全删除else if;第一个正则表达式已经剥离了非数字。这样,当if失败时,它将直接转到else。您可以在相同的条件中组合长度和开始0验证。

请注意,您可能实际上正在寻找正则表达式/^[a-z]/i,以确保它只包含小写字符(请注意起始克拉)。值得一提的是,第一次if计算是不必要的,因为str 已经完全等于str

可以重写如下:

function isItANum(str) {
  var phonenum = str.replace(/[^0-9]+/g,"");
  if (str.length === 11 && str.indexOf(0) === 0 && str.match(/[^a-z]/i)) {
    str = phonenum;
  } else {
    str = "Not a phone number";
  }
  return(str);
}

console.log(isItANum("hey"));
console.log(isItANum("111111111"));
console.log(isItANum("01111111111"));

希望这有帮助! :)

答案 1 :(得分:0)

在第二个if处,变量str已经等于“”。因此,如果str没有任何数字且str的值等于“”,则需要添加另一个,而不是电话号码。

function isItANum(str) {
var phonenum = str.replace(/[^0-9]+/g,"");

if(str.length===11 && str.indexOf(0)===0) {
 str = str;
} 
else if (str.match(/[a-z]/i)) {
  str = phonenum;
} 

if (str === '') {
  str = "Not a phone number";
}
console.log(str);
return str;
}

isItANum("hey");