正则表达式,用于validation具有一个空格和一个可选特殊字符的数字

有人可以告诉我如何用一个空格validation数字序列,最后会有一个可选的特殊字符说’#’,然后再跟着5个数字。

例:

12345 6587#2584

我试过了

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

但我不知道如何添加可选的’#’,最后是数字。

这应该可以解决问题

 /^\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个数字。

这个问题不是很清楚,但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})?