3

有人能告诉我如何用一个空格验证数字序列,最后会有一个可选的特殊字符,比如“#”,然后是一些 5 位数字。

例子:

12345 6587#2584

我试过了

(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))

但我不知道如何在末尾添加可选的“#”,后跟数字。

4

2 回答 2

2

这应该可以解决问题

/^\d+\s\d+(?:#\d+)?$/

rubular上看到

^      beginning of string
\d+    one or more numbers
\s     any whitespace character
\d+    one or more numbers
(?:    begin non-capturing group
  #    literal '#' character
  \d+  one or more numbers
)      end non-capturing group
$      end of string

编辑

/^0[\d\s]{,11}(?:#\d{,5}?$/

匹配以 开头的字符串0,后跟最多 11 个数字或空格。后面是一个可选#的,后面最多有 5 个数字。

于 2012-12-05T07:33:11.500 回答
0

这个问题不是很清楚,但 macek 的建议确实回答了您关于如何在末尾添加可选标签 '#' 后跟一些数字的问题,因此您应该尝试一下。(具体来说,(?:#\d+)?$是正则表达式的相关部分;(?:#\d{0,5})?$将确保存在 0 到 5 位数字。)

但是,用于确保在可选的“#”之前恰好有 1 个空格和最多 12 位数字的正则表达式是不正确的。所写的前瞻是没有意义的,因为\d{0,11}它将匹配任何字符串开头的 0 宽度字符串(因为这相当于 0 位数字)。你需要的是类似/^(?:[\d\s]{1,13}$)\d*\s\d*$/. 这将检查以确保存在正确数量的字符并且它们都是数字或空格,然后它将检查字符串中是否只有一个空格。这里有一些冗余,但这应该不是问题。另外,请注意,为了清楚起见,我使用\s的是空格字符而不是空格字符,但请注意,这将匹配制表符和其他空格,这可能不是您想要的。的位数{1,13}假设字符串由一个完全没有数字的空格组成是合法的,但空字符串是非法的;如果这不是正确的假设,请调整括号中的值。

最后,要将上述正则表达式与可选标签的正则表达式结合起来以确保正确的空格和数字计数,您需要更改前瞻,以便它可以匹配#$它应该是/^(?:[\d\s]{1,13}(#|$))\d*\s\d*(#\d{0,5})?$/.

(请注意,我还没有实际测试过上面的正则表达式,所以我不能 100% 确定(#|$)中间的 是否适用于所有实现。如果没有,可以用多余的. 替换它(#\d{0,5})?。)

于 2012-12-05T08:14:56.550 回答