2017-07-18 90 views
1

我正在研究一个JS练习,它的工作原理是半工作,但是当最后一个条件满足时,它不会返回一个语句,只有一个空的括号集合。我不太清楚为什么,但任何帮助表示赞赏!字符串返回语句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

只需按顺序逐步进行计算。

首先,在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"));

希望这有助于! :)

+0

嘿,谢谢!这真的有帮助!我很感激:) – grasshopper

+0

太棒了!很高兴听到这个解决方案似乎帮助你。一旦您确认此解决方案解决了您的问题,请不要忘记通过单击表决按钮下方的灰色检查标记解决方案为正确的 - 这会将其从“未答复的问题”队列中移除,并将声誉评为两个提问者和问题回答者。当然,在说,你没有义务标记我的答案(或任何其他答案)是正确的,但它确实有助于保持StackOverflow上的事情顺利进行:) –

0

在第二个如果,变量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");