我在Freecodecamp上做了一个挑战。我遇到的问题对我来说似乎毫无意义。
function telephoneCheck(str) {
// if string contains a letter then return false //
var exc = /[a-z\?/]/;
// check str to see if it has anything from the //
// regex and then make it into a string. //
var excJoin = str.match(exc).join('');
// if theres something in the //
// variable(something was found with regex) //
// then return false //
if(excJoin.length > 0) {
return false;
}
// else return true //
if(excJoin === null){return true;}
}
telephoneCheck("2(757)622-7382");
返回false
很好,但是当我只想说else {return true;}
时,它告诉我null不是一个对象。有什么问题?
http://freecodecamp.com/challenges/validate-us-telephone-numbers
答案 0 :(得分:2)
String.prototype.match
(在您的代码中:str.match(exc)
)如果与正则表达式不匹配则返回null,因此代码等同于null.join('')
,这是一个错误。
相反,请先检查它是否为空:
var excResult = str.match(exc);
if (excResult === null) {
// didn't match, do something
} else {
// did match, do something else
}
答案 1 :(得分:1)
您必须在使用对象
之前测试无效性答案 2 :(得分:1)
str.match(exc)
返回null。
所以你的代码应该这样做:
function telephoneCheck(str) {
// if string contains a letter then return false
var exc = /[a-z\?/]/;
//The match() method retrieves the matches when matching a string against a regular expression.
var excResult= str.match(exc);
//return false if there is a found
if(excResult != null) {
return false;
}
else{
//there is no found cause excResult == null
return true;
}
telephoneCheck("2(757)622-7382");