日期:2014-05-19 浏览次数:20711 次
^[-]?[0-9]+[\.]?[0-9]+$ //自己找了个 不是那么理想
<html> <script> var str = "0.2313"; var re = "^[0-9]+\\.??[0-9]+$"; if(str.match(re) != null && str.length <= 6){ alert("ok"); }else{ alert("error"); } </script> <body> test.html <body> </html>
------解决方案--------------------
试试
var s = '1233.61';
var re = /^(?=^\d?\D*\d?\D*\d?\D*\d?\D*\d?\D*\d?\D*)[0-9]+(\.[0-9]+)?$/;
alert(re.test(s))
------解决方案--------------------
更正下
/^(?=\d?\D*\d?\D*\d?\D*\d?\D*\d?\D*\d?\D*$)[0-9]+(\.[0-9]+)?$/
------解决方案--------------------
你们让开,高手来了。
你的问题有歧义。
如果指的是小数点后有六位,那么这个正则很好写:
var expression=/^\d+(\.\d{1,6})?$/; //因为是非负数,所以只需要第一位是数字就行了,不用判断有没有“-”。
如果你指的是总长度六位,那么要复杂一些
var expression=/^(?=.{1,6}$)\d+(\.\d+)?$/
第二种写法需要你的环境支持环视,因为是JS,所以在IE里应该木有问题。如果实在不能判断长度,那摸斗写个函数来判长度罢。
最后,记得给我分哦。
------解决方案--------------------
9楼的 你写的就有问题,别装好吧。。。。
/^\d+(\.\d{1,6})?$/ 这个 就不严格,人家说非负数 ,你\d+ 开始 0001 这样的都进去了,
=/^(?=.{1,6}$)\d+(\.\d+)?$/ 这个也不对 你的肯定型顺序环视用错了 ,(?=.{1,6}$) 表示环视内容是点后面1到6位,一共6位,你这个小数点后面都6位了,环视错了就等于没用,再看后面的00.000这样的也进去了,这个肯定是楼主不想要的东西。
学了几天正则就卖弄啊 。不过还知道环视是什么,说明还是懂点的。可惜啊,年轻人,太鲁莽。
这个我看了下我明白了楼主的意思,总共长6位,
2.67788
3456667
23.5666
0.55555
这样的都符合的话,就和9楼说的一样,动态匹配需要用到环视。
环视有四种:
肯定型顺序环视(?=……)
肯定性逆序环视(?<=……)
否定型顺序环视(?!……)
否定型逆序环视(?<!……)
环视是用来缩小查找匹配范围和确定位置的。
环视的性能很差,效率很定。
如果正常的正则表达式解决不了,建议楼主用程序和正则结合的方式,最好别用环视。
正则判断是否有非法字符,然后程序判断长度,这样做的时候很简单,而且效率也高。
如果楼主一定要一个正则搞定 那请楼主qq联系我 236788273
我的正则表达式 讲义下载http://download.csdn.net/detail/zzq19860626/4048641
------解决方案--------------------
11楼连(?=.{1,6}$)是什么意思都没有搞懂,不懂装懂。而且居然把3456667也数成六位数,数学真好。
9楼的基本正解,至于位数问题,楼主没说清楚是含小数点六位还是不含。9楼的瑕疵在于多位整数以0开始和小数点后以0结束没判断。但如果做如此之多的环视判断,效率不如JS。
------解决方案--------------------
我有正则表达式chm文档,要不我发给你 ,,你留Q