Regexp需要#个非空白字符

时间:2009-06-20 15:13:24

标签: regex textarea whitespace

我有一个textarea。我试图检查它在javascript中包含至少3个非空白字符,如果确实如此,我需要在php中重新检查发布的消息。

我认为一旦我在php中工作,我可以使用相同的正则表达式来实现javascript。然而,空白正在弄乱它。

我不明白为什么以下内容在php中不起作用:

$msg = mysql_real_escape_string($_POST["msg"]);

if(!preg_match('/[\S]{3,}/',$msg)){
     echo 'too short';
}

对我来说,似乎需要至少3个“非空白字符”。但是,如果我输入:

f f f

它说它太短了。和

f 

d

通过。我已经尝试添加“g”标志,并使用^和$围绕正则表达式。

感谢您提供任何提示

1 个答案:

答案 0 :(得分:1)

您的正则表达式匹配3个后续非空白字符。

以下匹配3个非空白字符,由任何内容分隔:

/(\S.*){3,}/

要跨多行执行验证,请添加s修饰符:

/(\S.*){3,}/s

您还应该在强调mysql_real_escape_string之前进行验证。在您的示例中,第二个字符串首先转换为f\r\ndf\nd。它现在包含3个后续的非空格字符!如您所见,这会搞砸验证。