我正在进行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");
答案 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");