与空/空消息匹配的正则表达式

时间:2014-06-02 13:34:18

标签: regex

我正在处理正则表达式,它与空消息或空白消息匹配。

我需要知道是否有人向我们发送了空白"仅包含空格或表格或新行的消息。

我在这里做了什么,但我对此并不满意:

^[\n,\r]{2,}$

由于

1 个答案:

答案 0 :(得分:1)

我首先在问题中解释正则表达式^[\n,\r]{2,}$

^ ...在消息字符串的开头开始搜索。

[\n,\r] ...匹配换行符\n(换行符)或逗号,或回车符\r的字符类定义。逗号在这里并不是真的想要的。提问者最有可能认为表达式中的字符需要以逗号分隔,但事实并非如此。

{2,} ...表示字符类定义 - 3个字符的OR - 应该至少应用2次或更多次以获得肯定结果。

$ ...在消息字符串末尾停止搜索。

因此,如果整个消息字符串包含至少2个字符(逗号,回车符或换行符),则表达式^[\n,\r]{2,}$将返回正数。如果消息字符串为空(无字符),或者只有3个字符中的1个或包含任何其他字符,则表达式返回负数,这意味着找不到字符串。因此,提问者的正则表达式对于验证消息是空白消息还是空消息没有用。


Sam和sp00在他们的评论中写道,而不是使用^\s*$,因为这个表达意味着更好。

^ ...在消息字符串的开头开始搜索。

\s ...匹配任何空格字符。有关使用Perl v5.18时\s匹配的内容的详细信息,请参阅Perl regular expression character class description。应该通过\s测试所使用的正则表达式引擎确实匹配哪个空白字符。特别是不间断空格字符在这里也很有趣,用于检查空白/空消息。

* ...表示字符类定义 - 任何空白字符 - 应该至少应用0次或更多次以获得肯定结果。

$ ...在消息字符串末尾停止搜索。

因此,如果整个消息字符串根本没有字符或仅包含1个或多个空格字符,则表达式^\s*$将返回正数。因此,根据空白/空白消息检查该表达式要好得多。


另一个有用且简单的正则表达式是^\W*$,如果整个邮件根本没有字符或只有非单词字符,则返回正数。

除了只包含emoticons的邮件是可接受的之外,没有任何字母,数字或下划线的邮件很可能没有任何意义。

但请注意,^\W*$不足以检查邮件是否包含真正有用的文本,因为单个字母,数字或下划线结果已经存在于否定匹配中,因此邮件会通过验证检查。