日期:2014-05-19  浏览次数:20711 次

求一正则、自己真不会正则
js 求一正则、 只让输入 非负的数字(整型或浮点型) “。”不能第一位、也不能最后一位、最多6位、





Java code
^[-]?[0-9]+[\.]?[0-9]+$ //自己找了个 不是那么理想




------解决方案--------------------
^(?:[1-9][0-9]*(?:\.[0-9]+)?|0\.(?!0+$)[0-9]+)$
------解决方案--------------------
^[0-9]+(\.?[0-9]{1,6}$)?
------解决方案--------------------
方法调用错了。。。用if (re.exec(v))
------解决方案--------------------
HTML code

<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