0

我正在尝试匹配字符串,

  1. 应至少包含一个非空格字符

  2. 字符串长度应为 1 到 8 个字符,

我想知道为什么当我想限制为 1 到 8 个字符时下面的代码不起作用。

.*\S.{1,8}

应该匹配,

abcdefge

 abcdefg   - first character is space, Any number of spaces can be there, but atleaset one non space character should be there

       a  

不应该匹配,

            - All spaces
 abcdefghijklm - Exeeds more then 8 characters

谢谢

4

4 回答 4

2

非正则表达式非常简单明了:

s.length() <= 8 && s.trim().length() > 0
于 2012-08-15T16:58:43.440 回答
2

对您的第一个标准使用前瞻,并为第二个标准使用量化的“任何”字符与开始和结束锚点相结合:

/^(?=.*\S).{1,8}$/

(这未经测试,所以我为错误道歉)

于 2012-08-15T17:05:36.630 回答
1

1.我认为有更好的选择来做到这一点。

2.首先检查字符串的长度是否在 1 到 8 之间,

3.如果是,则使用!Characters.isWhitespace()方法检查其是否为非空格字符。

于 2012-08-15T17:05:05.423 回答
1

采用:

str.matches("(?=.*[^ ]).{1,8}")
于 2012-08-15T17:20:39.297 回答