正则表达式允许数字和'全部'

时间:2011-02-21 13:43:42

标签: javascript regex

我正在尝试使用正则表达式函数来允许长度为3到8的数字。这可以使用/^[\d]{3,8}$/

来实现

当我想要用户输入'All'以及如何实现它时?

/^[\d]{3,8}|(\sAll)$/?这不起作用。

4 个答案:

答案 0 :(得分:5)

逻辑OR |的优先级较低,所以你的正则表达式:

^[\d]{3,8}|(\sAll)$

表示:

匹配^[\d]{3,8}
或匹配:(\sAll)$

您可能希望对您的选择进行分组,以便它们都需要^$

^(\d{3,8}|\sAll)$

如果您只想匹配All而不是前面的空白字符,请忽略\s

答案 1 :(得分:2)

^(\d{3,8}|All)$ 
  • 你有一个狂野的\s,看起来不对。
  • 您不需要在[]周围使用\d,因为它们是等效的。
  • 除非您正在捕获该群组,否则()周围不需要All,在这种情况下,您应将其置于(\d{3,8}|All)左右。无论如何,正如巴特在评论中指出的那样,你需要后者。

在rubular上看到它:http://www.rubular.com/r/HX6d7x3qpI

答案 2 :(得分:1)

/^\d{3,8}|(All)$/

\s强迫使用前导空格字符..

Example Here

正如Tim所说,交替包含锚点,因此All前导空格将匹配(带有尾随空格的数字)。纠正...

/(^\d{3,8}$|^All$)/

Example Here

答案 3 :(得分:0)

为什么不使用这样的东西,而不是使正则表达式复杂化:

if ( input !== 'All' && input.match ( /^[\d]{3,8}$/ ) === null ) {
  // error
} else {
  // all OK
}