返回字母数字 - 组合函数片段的问题



之前提交过,在这一点上,所有部分都是分开工作的,但不能一起工作。我尝试移动东西以查看它是否只是订单问题,但这并没有解决它。试图将它们放在一个大的if/else中似乎也不起作用。我可以让字符串仅显示字母数字字符或显示"不是字符串",但我无法让代码同时执行这两项操作。本节将仅返回正确的字母数字:

function nothingSpecial(str) {
  var re = /[A-Zs0-9]/i;
  var newStr = '';
  for(var i=0; i<str.length; i++){
    if (re.test(str[i])){
      newStr = newStr + str[i];
    }
  }
   return newStr;
   if(str.length <= 0) {
    return ("Not a string!");
  }
      if (typeof str !== String) {
        return "Not a string!"} 
    }
nothingSpecial("asdfalsd@#$#")

这将返回"不是字符串!",即使它应该显示字母数字,但对于数字和"是正确的或看起来如此

function nothingSpecial(str) {
  var re = /[A-Zs0-9]/i;
  var newStr = '';
    if(str.length <= 0) {
    return ("Not a string!");
  }
  if (typeof str !== String) {
    return "Not a string!"} 
  for(var i=0; i<str.length; i++){
    if (re.test(str[i])){
      newStr = newStr + str[i];
    }
  }
   return newStr;
    }
nothingSpecial(23)

我做错了什么? -提前谢谢你!

编辑:好的,根据您的评论,您开始:

这是你的问题:

if (typeof str !== String)

您正在比较 typeof str (字符串)的结果与字符串的对象构造函数 String ,这是一个函数。它失败了,因为你实际上并没有检查一个字符串,你正在将一个字符串(typeof的输出,无论你检查的类型如何,它始终是一个字符串)和一个函数。您的比较应如下所示:

if (typeof str !== 'string')

编辑:这是一个JSFiddle。

要接受任何类型的参数,转换为字符串并仅保留字母数字字符:

function nothingSpecial(str) {
  str += '' // convert any argument to string
  str = str.replace(/[^A-Zs0-9]/gi, "") // remove all characters except alphanumeric and any kind of space (newlines too)
  return str
}  

最新更新