3

我正在尝试编写一个与具有以下属性的字符串匹配的正则表达式:

  1. 正好包含 3 个字符。
  2. 可以包含空格。
  3. 至少一个字符应为非空格。
  4. 只允许空格和数字。

请参阅下面的示例。我b用来表示一个空格字符。

有效示例

123
b12
bb1
1bb
12b

无效示例

bbb
1b2

我试过了

 [0-9 ]{1, 3}

上面的正则表达式匹配所有字符为空的字符串。有人可以帮我写一个更好的正则表达式吗?

4

2 回答 2

9

我会为此使用前瞻:

^(?=.*\d)[\d ]{3}$

解释:

^         # Start of string
(?=.*\d)  # Assert presence of at least one digit
[\d ]{3}  # Match exactly three digits or spaces
$         # End of string
于 2013-01-20T08:57:16.103 回答
5

这应该完整地写出来。幸运的是,如果您的意思是您只需要可选地前面或后面有空格的数字(从1b2不允许的位来看),那么只有少数可能性。

([0-9]  )|([0-9]{2} )|([0-9]{3})|(  [0-9])|( [0-9]{2})

你有它。

当然,如果您可以在正则表达式之外检查长度=3,则正则表达式本身可以缩短为

([0-9]{1,3}[ ]*)|([ ]*[0-9]{1,3})
于 2013-01-20T08:52:32.147 回答