空字符串或空格的正则表达式

52

我正在尝试检测用户是否在文本框中输入了空格:

 var regex = "^\s+$" ; 
 if($("#siren").val().match(regex)) {
     echo($("#siren").val());
     error+=1;
    $("#siren").addClass("error");
    $(".div-error").append("- Champ Siren/Siret ne doit pas etre vide<br/>");
 }

if($("#siren").val().match(regex)) 本应匹配空格字符串,但似乎无效,我错在哪里了?

感谢你的帮助。


1
当你说“似乎不起作用”时,能否更具体一些?您是否有任何失败的示例输入可以分享? - user1720624
6个回答

70

\(反斜杠)在 .match 调用中没有得到正确转义。不过使用正则表达式字面量会更容易些,两种方法都可以:

var regex = "^\\s+$";
var regex = /^\s+$/;

请注意,+需要至少一个空格。您可能需要使用*


我使用 var regex = "^\s+$"; 它非常好用,非常感谢你们所有人。 - dtjmsy

36

如果您想查找空字符串以及空格,您需要使用 * 而不是 +。

var regex = /^\s*$/ ;
                ^

24

如果您正在使用jQuery,则可以使用.trim()来去除字符串中的空格。

if ($("#siren").val().trim() == "") {
  // it's empty
}

2
如果您只需要支持JavaScript 1.8浏览器,那么可以使用String.trim - Explosion Pills
1
@ExplosionPills 我相信jQuery已经在内部处理了这个问题,而且OP已经在使用jQuery了。 - h2ooooooo
@Overcode,你觉得简单在哪里?trim()函数也使用了正则表达式,比/^\s*$/更加复杂。 - Christophe
1
在我看来,这比正则表达式更清晰地显示了代码的意图。说 foo.trim() == '' 就是说“这个字符串去掉空格后是否为空?”。而说 foo.match(/^\s*$/) 则是在问“字符串 foo 是否匹配由正则表达式定义的状态机?” 是的,这个正则表达式很简单,但它仍然不够清晰。你也不能保证 trim 通过正则表达式定义,因为许多 JS 引擎都内置了它。 - yan
1
@yan 理解你对本地 trim 的看法。至于“状态机”部分,你有点过了 :-) - Christophe
显示剩余2条评论

5
如果只关心字符串开头和结尾的空格(但不在中间),则另一种选项是使用String.trim()函数:
"    your string contents  ".trim();

// => "your string contents"

2
这是我的解决方案。

http://jsfiddle.net/DqGB8/1/

var error=0;
var test = [" ", "   "];
 if(test[0].match(/^\s*$/g)) {
     $("#output").html("MATCH!");
     error+=1;
 } else {
     $("#output").html("no_match");
 }

0

遇到类似的问题,需要在字符串中查找空格,解决方案:

  • 搜索一个空格:

    var regex = /^.+\s.+$/ ;
    

    例如:"user last_name"

  • 搜索多个空格:

    var regex = /^.+\s.+$/g ;
    

    例如:"user last name"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接