论坛首页 Web前端技术论坛

不以0开头的数字输入框

浏览 5309 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-24   最后修改:2009-12-24
  在做Web开发的时候,经常需要让一个text框只能输入数字,而数字又不能以0开头。上网查了很多,却始终找不到我所需要的,无奈之下自己写一个吧。代码如下:
<input type="text" value="3" maxlength="3" style="width : 30px;text-align: right;" onKeyUp="value=(parseInt((value=value.replace(/\D/g,''))==''?'0':value,10))" />


代码分析:
1、onKeyUp 就是键盘松开后调用的事件。
2、/\D/g 这个就是我这里用的正则表达式。头尾的/符号表示这里面包的是正则表达式;最后一个g表示全文搜索;\D是[^0-9]的简写,表示非数字的意思(因为我们要把非数字换成'')。
3、value=value.replace(/\D/g,'')先用replace方法把非数字的字符替换成'',再赋值给当前text框的value属性。
4、(value=value.replace(/\D/g,''))==''?'0':value",判断替换掉非数字字符后的文本是否为空,为空则补0,不为空就是当前的值了。
5、最后调用parseInt(value,10)方法,把当前的value转成数字值,这么做是为了把类似012这样的字符前面的0去掉(测试经常挑这样的毛病,实在变态!)。这里特别要注意的是,使用parseInt方法的时候,一定要把value后的10这个参数传进去,否则像012这样的字符会被当作8进制的数字来处理的。
6、最后再把这个转换后的数字赋值给value就是了。

  平时在正则方面花的功夫比较少,本想写个正则,replace下就完了,可这里是要把正则匹配的字符留下,不匹配的才replace掉,这种正则似乎不太好写,我写的都是匹配的正则,怎么反过来还不知道(有哪位知道的也希望提供个给我哦^^)。暂时还是用int转换的方式来解决吧。
  文中只是个人的理解,有不当之处望高手们批评指正。
   发表时间:2009-12-24  
this.value ?
0 请登录后投票
   发表时间:2009-12-24  
在当前标签里写,直接用value就可以了。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics