之前提交过,在这一点上,所有部分都是分开工作的,但不能一起工作。我尝试移动东西以查看它是否只是订单问题,但这并没有解决它。试图将它们放在一个大的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
}