2014-04-07 33 views
3

我想验证一个不应该是00000的5位数字。除了00000之外的所有数字都是允许的。接受除5个连续0之外的所有数字:Javascript

示例:01201,00001,21436,45645是有效数字,而1,12,123,1234,00000是无效数字。我试过^([0-9]{5}[^(0){5}])$,但它没用。

对此的任何帮助将不胜感激。

谢谢。

+4

约string.length减什么= 5 &&字符串= “00000” ? [编辑:好的,测试数字度需要正则表达式,请参阅@ mplungjan的答案] – Jasper

回答

8

使用负得正前瞻:

/^(?!0{5})\d{5}$/ 

/^(?!0{5})\d{5}$/.test('01201') 
// => true 
/^(?!0{5})\d{5}$/.test('00001') 
// => true 
/^(?!0{5})\d{5}$/.test('21436') 
// => true 
/^(?!0{5})\d{5}$/.test('1') 
// => false 
/^(?!0{5})\d{5}$/.test('12') 
// => false 
/^(?!0{5})\d{5}$/.test('00000') 
// => false 
+0

嘿,这工作像一个魅力,我upvoted你的答案。唯一我想知道的是如何在JavaScript中使用lookahead。简单的解释或简单的教程链接将对我有所帮助。 –

+0

@NareshRavlani,阅读[正则表达式教程 - Lookahead和Lookbehind Zero-Length Assertions](http://www.regular-expressions.info/lookaround.html)将会有所帮助。 – falsetru

+0

嘿谢谢人.. !! :) –

5

可以使用定向排除:

^(?!0{5})\d{5}$ 

负厕所提前(?!...)会,如果里面有什么失败,整个正则表达式它匹配,\d[0-9]的快捷方式。

2

的正则表达式引擎不支持前瞻:

^(0000[1-9]|000[1-9][0-9]|00[1-9][0-9]{2}|0[1-9][0-9]{3}|[1-9][0-9]{4})$ 
8

无需负先行

Live Demo

function isvalid5(str) { 
    return str != "00000" && /^\d{5}$/.test(str); 
} 
+0

你的正则表达式中有一个错字,它应该以'^'而不是'$'开头。 – TimWolla

+0

是的,谢谢..... – mplungjan

相关问题