【问题标题】:Return Alphanumerics -issue with combining pieces of the function返回字母数字 - 合并函数部分的问题
【发布时间】:2017-05-27 10:00:28
【问题描述】:

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

function nothingSpecial(str) {
  var re = /[A-Z\s0-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-Z\s0-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)

我做错了什么? -先感谢您!

【问题讨论】:

  • 第一个sn-p函数中间有return,其他行不执行
  • 你想做什么?就算你提早提交了,我们怎么知道呢?
  • 当您使用数字参数 (23) 调用函数时,您的第二个 sn-p 正确返回“不是字符串”。数字不是字符串。
  • @edc65 - 有没有办法解决这个问题?看起来你可以有多个返回选项,只要它们在块内(例如,多个单独的 if/else 语句)这只是练习。我知道简单的方法是使用 .replace,我正在练习使用循环,想看看如何使它工作。我之前发布了(单独的帖子)关于代码的不同问题。感谢您查看代码!
  • 您的返回值很好,但您正在检查 'str' 是一个函数,而不是一个字符串。看我的回答。

标签: javascript if-statement return alphanumeric


【解决方案1】:

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

这是你的问题:

if (typeof str !== String)

您将typeof str(一个字符串)的结果与object constructor(字符串)String(一个函数)的结果进行比较。它失败了,因为您实际上并没有检查字符串,而是将字符串(typeof 的输出,无论您检查的类型如何,它始终是一个字符串)与一个函数进行比较。您的比较应如下所示:

if (typeof str !== 'string')

编辑:这是JSFiddle

【讨论】:

  • 我的道歉!当数字(或任何非字符串传入)时,它需要返回“非字符串” - 它不应该将数字转换为字符串。
  • 我解决了您犯的两个错误,第二个错误的修复会为您解决。我已经编辑了我的答案以删除对第一个的引用。
【解决方案2】:

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

function nothingSpecial(str) {

  str += '' // convert any argument to string

  str = str.replace(/[^A-Z\s0-9]/gi, "") // remove all characters except alphanumeric and any kind of space (newlines too)

  return str
}  

【讨论】:

  • 谢谢!我之前发布过关于相同的代码块,这是推荐的。我希望尝试使用循环进行练习,否则是的,这完全是要走的路!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
相关资源
最近更新 更多