可打印ASCII的正则表达式,但不允许所有字符都是空格的字符串

时间:2015-02-12 06:00:23

标签: java regex

我有一个正则表达式,只接受可打印的ASCII设置如下。

([!-~]|[ ])*

但是我想拒绝像

这样的空间的字符串
"        "

有什么建议吗?

提前致谢

3 个答案:

答案 0 :(得分:2)

好像你想要这样的东西,

"^(?=[ \\t]*\\S)([!-~]|[ ])*"

(?=[ \\t]*\\S)断言在该特定行上必须至少存在一个非空格字符。

string.matches("(?=\\s*\\S)([!-~]|[ ])*");

请注意,\\s也会与换行符匹配。

DEMO

String s[] = {"foo bar", "    ","bar"};
for(String i:s)
{
    System.out.println(i.matches("(?=[ \\t]*\\S)([!-~]|[ ])*"));
}

输出:

true
false
true

答案 1 :(得分:1)

如果空字符串""也未通过正则表达式测试,则只需在匹配前String#Trim()输入*。将正则表达量词从+更改为([!-~]|[ ])+ ,即至少需要一个字符。

{{1}}

然后空字符串或仅包含空格的字符串将无法与正则表达式匹配。

答案 2 :(得分:0)

由于我必须在XSD中使用正则表达式,因此不能使用以下正则表达式

^(?=[ \\t]*\\S)([!-~]|[ ])*

但我使用了以下表达式,这似乎对我有用。一个没有任何前瞻的简单表达

([ ]*([!-~])[ ]*)+