确定字符串是否为“空”

时间:2010-09-05 03:06:51

标签: javascript regex

我需要一个JavaScript函数来告诉我字符串对象是否为空。通过“空”,我的意思是它不仅仅是空白字符。我写过这个原型:

String.prototype.isEmpty = function() {
  return this.length === 0 || this === " " || this.test(/^\s*$/);
}

这样好吗?

那里有更高性能的版本吗?

6 个答案:

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

我摆弄了一些东西:

  • 我正在返回this.length的倒数,对于0为true,对于其他所有false的数字。
  • 我删除了" "的支票。实际上我没有看到太多,如果输入单个空格的任何情况,取消检查平均IMO会更快。
  • 翻转正则表达式< - >像其他人一样的字符串。

String.prototype.isEmpty = function() {
return !this.length || /^\s*$/.test(this);
}

答案 5 :(得分:0)

来自示例https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim

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错误