0

我正在尝试编写一个正则表达式来验证在未定义的地方只有一个空格的数字?

最多 12 个字符加一个空格或最多 11 个字符不加空格。

例如:'25897 569874'、'5674'、'65783987665'、'435 6523'

我试过了。^[0-9]{0,12}$这不是完美的,因为我不知道如何放置空格及其计数。

4

2 回答 2

4

您可以使用此正则表达式:

^(?:\d{1,11}|(?=\d+ \d+$)[\d ]{3,12})$

\d{1,11}将匹配 1 到 11 位数字,没有空格。

(?=\d+ \d+$)[\d ]{3,12}最多匹配 11 位数字,中间有一个空格。空格不能是前导或尾随,因此' 23'将被拒绝。

  • (?=\d+ \d+$)是一个先行匹配一个或多个数字,然后是一个空格,然后是一个或多个数字,然后锚定字符串的末尾。它保证只会出现一个空格,并且空格不会前导或尾随。前瞻也隐含地确认字符串中至少有 3 个字符。
  • [\d ]{3,12}将保证字符串仅包含数字或空格,并且最多包含 12 个。重复次数的下限可以设置为 3 或更低,因为它已被前瞻所暗示。

2 个约束共同保证文本包含 1 到 11 个数字以及数字之间任意位置的可选空格。


允许前导空格,但拒绝单个空格、空字符串和尾随空格:

^(?:\d{1,11}|(?=\d* \d+$)[\d ]{2,12})$

同样,前瞻意味着至少 2 个字符,因此可以将重复次数设置为 2 或更低。

于 2012-12-05T06:00:19.920 回答
-1

^[0-9 ]{0,12}$ 将匹配最多 12 个带或不带空格的字符串如果您需要多个条件,请尝试 OR 运算符(管道):|

^[0-9 ]{0,12}$|另一个条件

于 2012-12-05T06:00:36.740 回答