我需要一个JavaScript函数来告诉我字符串对象是否为空。通过“空”,我的意思是它不仅仅是空白字符。我写过这个原型:
String.prototype.isEmpty = function() {
return this.length === 0 || this === " " || this.test(/^\s*$/);
}
这样好吗?
那里有更高性能的版本吗?
答案 0 :(得分:12)
使用
String.prototype.isEmpty = function() {
if (!this.match(/\S/)) {
return ('enter some valid input.Empty space is not allowed');
} else {
return "correct input";
}
}
alert("test 1:"+(" ".isEmpty()));
alert("test 2:"+(" \t ".isEmpty()));
alert("test 3:"+(" \n ".isEmpty()));
alert("test 4:"+("hi".isEmpty()));
注意:
\ s将匹配空格字符:空格,制表符或换行符。
\ S将匹配非空白字符:除了空格,制表符或新行之外的任何内容。 如果你的字符串有一个不是空格,制表符或新行的单个字符,那么它不是空的。 因此,您只需要搜索一个字符:\ S
答案 1 :(得分:4)
您似乎需要使用/^\s*$/.test(this)
而不是this.test(/^\s*$/)
。 strings没有test()
方法,除非您使用的是一些实现此方法的JavaScript库。
/^\s*$/.test(this)
已足够,但前两个表达式会在其中任何一个计算结果为true时短路,而不必测试正则表达式。这应该非常有效。
正如上面评论中提到的@Matthew Crumley,您的this === " "
表达式将始终评估为false。您可以删除此表达式,或者使用==
,如果您只需要一个空格字符就可以使用很多字符串:
String.prototype.isEmpty = function() {
return this.length === 0 || this == " " || /^\s*$/.test(this);
}
答案 2 :(得分:1)
String.prototype.isEmpty = function() {
return this.length == 0 || /^\s*$/.test(this);
}
有一种可能性超出255(不考虑代码大于255的Unicode字符),长度为1的字符串包含空格字符。考虑到长度大于1的字符串,可能性会更低。
答案 3 :(得分:1)
通常,使用RegExp.prototype.test
检查模式匹配没有编译返回的匹配数组(String.prototype.match
)可能会有更好的性能。我试试 - 但尚未测试 - 类似于:
function isEmpty() {
var string = arguments[0] ;
var EMPTY_STRING_PATTERN = /^\s*$/ , empty = false ;
if( EMPTY_STRING_PATTERN.exec(string) === true ) empty = true ;
return empty ;
}
另一方面,对核心javascript对象的原型对象进行操作被认为是不好的做法。
答案 4 :(得分:0)
我摆弄了一些东西:
true
,对于其他所有false
的数字。" "
的支票。实际上我没有看到太多,如果输入单个空格的任何情况,取消检查平均IMO会更快。 String.prototype.isEmpty = function() {
return !this.length || /^\s*$/.test(this);
}
答案 5 :(得分:0)
var orig=" foo "
document.write(orig.trim()) // foo
document.write(orig.trim().length) // 3
在FF 3.6.8,Safari 5.0.1,Google Chrome 5.0.375.127上测试,但在IE 8上产生js错误