我有一个可以输入整数或者具有一位小数的输入框,设置onkeyup="value=value.replace(/[^\d\.]/g,'')"
但是这只能保证他可以输入数字和“.”,并不能限制输入“.”的个数,比如输入“2.2.2.2.2”也能通过。我想请教下怎么设置能够只输入合法的数字(整数或者小数点后只有一位的小数),最好是输入不合法的时候在页面上能够直接给出提示

解决方案 »

  1.   

    var pattern = /^\d+(\.\d)?$/;
    pattern.test("2.2.2.2.2");用这样的正则表达式判断。
      

  2.   

    另外,我的意思是直接修改我的这条语句
    onkeyup="value=value.replace(/[^\d\.]/g,'')" 
    对于正则表达式我没有学过,所以……
      

  3.   

    是你误解我还是我误解你了?我这就是判断"2.2.2.2"为false啊!真晕了!这个判断只有当"123.1"或“123”这样的形式返回值才是true。
      

  4.   

    并且你自己说的:“最好是输入不合法的时候在页面上能够直接给出提示”,你不判断直接replace掉怎么能给出提示呢?教教我!
      

  5.   

    直接使用isNaN(是否为非数字Not a Number)进行判断
      

  6.   

    不好意思,正则表达式我不是很懂。你的意思是pattern.test("2.2.2.2.2"); 这句可以判断掉所有的不合法的输入么?哪怕是“124234.242142.432413”或者“234214.213.312.4321.4”这样的?如果方便,能否再详细些?谢谢
      

  7.   

    是的,/^\d+(\.\d)?$/ 这个正则式的意思就是:
    两边的/你别管,固定写法,不是用""的,就是用/中间夹正则表达式,
    ^为正则的开始,$为正则的结束
    \d是数字,+是出现的次数为1次或多次
    ()你就当成()内是一个整体,
    \.是转义,因为.有另外的含义,如果想直接用.这个字符串去匹配,要转义,
    ?是出现0次或1次
    这样这个正则的意思就是,要么就是 123312这样的整数,次数不限,至少一次,如果出现了. 则后面必须出现一个数字 这样 123123.1 也是符合要求的,因为 .与\d被()括起来了,要么一起出现,要么都不能出现,
    而?问号限制了出现的次数,要么0次,要么1次,不能出现2次或2次以上,这样1232.2.2.2.2.2就是不符合的,然后你就用pattern.test(变量)来判断,这个式子是有返回值的,符合规则为true,不符合为false,中间的变量你可以在调用处传进来。这样解释还行?
      

  8.   

    如果不需要提示消息的话,是不是可以不用js而把这个/^\d+(\.\d)?$/直接写在jsp页面上,那样应该怎么写呢?不用我写的那个replace
      

  9.   

    正则表达式 : ^[1-9]\d*|[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
    key pressed 事件判断是否是合法字符,不是就出提示,
    个人认为 不出提示直接删掉
      

  10.   

    限制整数位数是这样的: /^\d{5}(\.\d)?$/ 把原来那个+号替换成 {5} 意思是必须出现5次,如果是范围,就是  {1,5} 出现1次-5次之间,至于你说的那个直接写在jsp页面上,是不行的,而且我不太清楚你的真正需求是什么!