验证电话号码。 Null不是一个对象

时间:2017-05-02 13:44:46

标签: javascript object

我在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

3 个答案:

答案 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");