Regexp需要#个非空白字符

Regexp需要#个非空白字符,regex,textarea,whitespace,Regex,Textarea,Whitespace,我有一个文本区。我试图检查它是否在javascript中至少包含3个非空白字符,如果包含,我需要重新检查php中发布的消息 我想,一旦我在php中使用它,我就可以对javascript使用相同的regexp。然而,空白区把事情搞砸了 我不明白为什么以下内容在php中不起作用: $msg = mysql_real_escape_string($_POST["msg"]); if(!preg_match('/[\S]{3,}/',$msg)){ echo 'too short'; }

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

我想,一旦我在php中使用它,我就可以对javascript使用相同的regexp。然而,空白区把事情搞砸了

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

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

if(!preg_match('/[\S]{3,}/',$msg)){
     echo 'too short';
}
在我看来,这似乎需要至少3个“非空白字符”。但是,如果我进入:

f f f
它说它太短了。及

f 

d
通行证。我已经尝试添加“g”标志,并在regexp周围使用^和$


感谢您提供的提示

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

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

/(\S.*){3,}/
要跨多行执行验证,请添加
s
修饰符:

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

在调用
mysql\u real\u escape\u string
之前,还应该执行验证。在您的示例中,第二个字符串被转换为第一个
f\r\nd
f\nd
。它现在包含3个后续非空白字符!正如您所看到的,这破坏了验证。

我正在测试它,发现换行符不起作用,然后我再次检查了您的回复,现在看到了。。。。非常感谢,我的regexp很烂。@Whosane,我这么说是因为你似乎是新来的。如果molf的回答对你有好处,那么接受它是礼貌的(点击答案左边票数下的勾号。谢谢你的提醒。不过还有一件事,我认为:即使移动mysql_real__escape,d s m s也显示得太短了…现在它只说如果一行有3个字符就好了。我想我去吧../^(\s[.\s]*){3,}$/我认为添加\s意味着您可以有一个新行。可能“.”没有包括新行吗?@Whosane,我更新了示例。s修饰符应该可以做到这一点。