我正在尝试使用正则表达式函数来允许长度为3到8的数字。这可以使用/^[\d]{3,8}$/
当我想要用户输入'All'以及如何实现它时?
/^[\d]{3,8}|(\sAll)$/
是?
这不起作用。
答案 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
强迫使用前导空格字符..
正如Tim所说,交替包含锚点,因此All
前导空格将匹配(带有尾随空格的数字)。纠正...
/(^\d{3,8}$|^All$)/
答案 3 :(得分:0)
为什么不使用这样的东西,而不是使正则表达式复杂化:
if ( input !== 'All' && input.match ( /^[\d]{3,8}$/ ) === null ) {
// error
} else {
// all OK
}