这样一串正则/^[1-9]\d*|0$/,是之前开发写的,用来简单检查输入的第一位不是0的不限位数的全数字串

后面的|0没搞明白为什么加?
问题是,为什么这条正则检查比如123a也是正确的?

第1个回答  2013-01-25
你原意是验证自然数(现在的说法是正整数+0都属于自然数)
你的 | 号的问题,这个正则表达式的意思是 (行首以1-9开头,后面跟任意长度的数字,再后面不管跟什么字符) 或者 (前面不管什么字符,以0结尾)
如果要验证自然数,这样改就行了.
^([1-9]\d*|0)$追问

\d*|0$,这段能表示(行首以1-9开头,后面跟任意长度的数字,再后面不管跟什么字符) 或者 (前面不管什么字符,以0结尾)?
关键是我举得例子123a,没有以0结尾,是对的啊?而且\d不是[0-9]吗,为什么能表示成不管跟什么字符?

第2个回答  2013-01-25
楼上的说明有问题,其实这个正则(/^[1-9]\d*|0$/.test(input))是与下面等效的:
if(/^[1-9]\d*/.test(input) || /0$/.test(input)){
....

}

所以就知道验证123a为什么正确,|号的用法以前的那个开发肯定是没搞清楚。追问

原来如此,我觉得前面那位兄弟的解释也有问题,他解释的也是我本来以为的。呵呵,多谢了,原来|这玩意是这么回事!

本回答被提问者采纳
第3个回答  2013-01-25
阁下用的是test方法?对于test方法,只要用match能匹配到就放回true,否则返回false.这个正则表达式可以匹配到123a的123字符。追问

嗯,关键是|的用法不太明白,3Q

相似回答