javascript - 如何用js限定文本框只能输入数字和小数点,且只能输入小数点后两位?
PHPz
PHPz 2017-04-10 15:04:41
[JavaScript讨论组]

第一位不能是0或者是.
不能同时出现两个.
最后一位不能是.
我可以只输入20也可以输入20.25也可以只输入20.2
有没有好的写法?


$("#amount").on('keyup', function (event) {
    var $amountInput = $(this);
    //响应鼠标事件,允许左右方向键移动 
    event = window.event || event;
    if (event.keyCode == 37 | event.keyCode == 39) {
        return;
    }
    //先把非数字的都替换掉,除了数字和. 
    $amountInput.val($amountInput.val().replace(/[^\d.]/g, "").
        //只允许一个小数点              
        replace(/^\./g, "").replace(/\.{2,}/g, ".").
        //只能输入小数点后两位
        replace(".", "$#$").replace(/\./g, "").replace("$#$", ".").replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'));
            });
$("#amount").on('blur', function () {
    var $amountInput = $(this);
    //最后一位是小数点的话,移除
    $amountInput.val(($amountInput.val().replace(/\.$/g, "")));
});

本来只是输入正数就可以了,之前用isNAN就可以搞定,早上临时改需求,搜索了度娘然后用上面这个判断,总觉得应该不用那么多判断,所以才在这问问大家。

PHPz
PHPz

学习是最好的投资!

全部回复(4)
伊谢尔伦

只监听keyup/keypress的,右键粘贴就走掉了

blur也不一定会触发的

一般想要输入后触发监听blur change
要输入中触发监听keyup input

然后不建议依赖key系列事件的keycode也好,阻止事件来阻止输入也好,因为“输入”不一定靠键盘的,粘贴啊,中文输入法不触发key事件啊,自动填表啊等等等等都是有的

怪我咯

[1-9]\d+(\.\d{1,2})?

巴扎黑
var reg = /^[1-9]\d*(?:\.\d{1,2}|\d*)$/;

reg.test('0'); // false
reg.test('0.'); // false
reg.test('1.'); // false
reg.test('.12'); // false
reg.test('1.234') // false
reg.test('1.23') // true
reg.test('12.34') // true
reg.test('1234') // true
伊谢尔伦

看了你的问题,你说第一位不能是0我不太理解这种数字有啥用。你的写法在否定了012的同时也否定了0.12。
我觉得简单一点的正则,可以加一位数字就好。就是否定00之类的数字,而不否定0.之类的浮点数,也保留了自然数0。写法如下:(^((?!0[0-9])\d+(\.\d{1,2})?)$)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号