V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
gap
V2EX  ›  JavaScript

如何限制只允许用户在表单中输入十进制的数呢?

  •  
  •   gap · 2017-09-23 10:35:43 +08:00 · 4206 次点击
    这是一个创建于 2652 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不允许输入其他譬如十六进制的数,譬如 1e4, 1e100 等,我用 parseInt, isNaN, 正则貌似都无法实现
    25 条回复    2017-09-24 15:14:43 +08:00
    sunchen
        1
    sunchen  
       2017-09-23 10:37:02 +08:00
    正则 \d+ 不行?
    lslqtz
        2
    lslqtz  
       2017-09-23 10:38:31 +08:00 via iPhone
    判断是不是太大不就好了…
    有时十进制和十六进制会冲突吧
    geelaw
        3
    geelaw  
       2017-09-23 10:49:40 +08:00 via iPhone
    @sunchen 当然不行,因为 \d 的范围比 [0-9] 大。

    只能要求输入的东西可以被理解为十进制,而不能要求输入的东西“是”十进制。
    xcatliu
        4
    xcatliu  
       2017-09-23 10:50:28 +08:00 via iPhone   ❤️ 2
    1e4 1e100 一般是指科学计数法吧
    bkmi
        5
    bkmi  
       2017-09-23 10:54:46 +08:00 via Android   ❤️ 1
    兄台,你列的那叫科学记数法,16 进制 0x 开头,不妨把你碰到的问题说出来
    TigerK
        6
    TigerK  
       2017-09-23 11:06:05 +08:00
    直接用整数啊
    sunchen
        7
    sunchen  
       2017-09-23 11:10:57 +08:00
    @geelaw 10 可以同时表示 16 进制的 16 和 10 进制的 10,没有指明进制你怎么判断
    geelaw
        8
    geelaw  
       2017-09-23 11:26:16 +08:00
    @sunchen 空了一行的部分是回复题主的,你是在把我的话具体化吗?
    gap
        9
    gap  
    OP
       2017-09-23 11:28:46 +08:00
    @bkmi

    看来基础不牢...是这样的, 我有个 reduce 求和的方法,遇到 1e4 类似的输入就会出问题...还望指点

    function total(target = [{ amount: '100' }, { amount: '200'}]) { return target.reduce((total, obj) => total + obj.amount, 0) }

    total() // 0100200

    function total(target = [{ amount: '100' }, { amount: '200'}]) { return target.reduce((total, obj) => total + parseInt(obj.amount), 0) }

    total() // 300

    total([{ amount: '1e4' }]) // 1
    annielong
        10
    annielong  
       2017-09-23 11:34:01 +08:00
    用 j 前台判断吧,最基本的的就是不允许 0-9 以外的键值输入
    xcatliu
        11
    xcatliu  
       2017-09-23 11:34:08 +08:00 via iPhone   ❤️ 1
    @gap 应该可以把 parseInt 换成 Number,这个才是字符串转数字的方法,如果转成了 NaN 就抛异常即可
    schezukNewTos
        13
    schezukNewTos  
       2017-09-23 11:36:27 +08:00   ❤️ 1
    *typo
    搜索 javascript Scientific Notation

    Number("4.874915326E7")
    yhxx
        14
    yhxx  
       2017-09-23 11:43:08 +08:00
    那不是进制
    是科学计数法
    Sapp
        15
    Sapp  
       2017-09-23 11:45:08 +08:00 via Android
    你直接不让输入数字以外的不就行了吗?
    noe132
        16
    noe132  
       2017-09-23 11:49:46 +08:00   ❤️ 1
    监听 keypress,遇到非 0-9 e.preventDefault()
    gap
        17
    gap  
    OP
       2017-09-23 11:58:20 +08:00
    感谢大家!太弱鸡了,把科学计数法当成十六进制了...
    geelaw
        18
    geelaw  
       2017-09-23 12:25:14 +08:00
    @noe132 这是不对的,因为粘贴并不会引发这个事件
    dong3580
        19
    dong3580  
       2017-09-23 13:02:27 +08:00 via Android
    正则啊😂
    SingeeKing
        20
    SingeeKing  
       2017-09-23 16:12:21 +08:00 via iPhone
    正则 \d+ 不行?
    zhx1991
        21
    zhx1991  
       2017-09-23 18:21:36 +08:00
    001 算不算合法输入?
    u2386
        22
    u2386  
       2017-09-23 18:24:49 +08:00 via iPhone
    怎么判断 1 是什么进制。

    让用户必须输入 9 不准输入字母...
    br00k
        23
    br00k  
       2017-09-24 00:53:06 +08:00
    输入框 type 使用 number 不就可以了么。
    shengchao
        24
    shengchao  
       2017-09-24 15:14:21 +08:00
    onkeyup="this.value=this.value.replace(/\D/g,'')"

    给 input 添加这个元素,完美
    shengchao
        25
    shengchao  
       2017-09-24 15:14:43 +08:00
    是属性,说错了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2135 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:53 · PVG 08:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.