正则表达式求助,校验合法小数或整数, 需要排除情况如下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
palmers

正则表达式求助,校验合法小数或整数, 需要排除情况如下

  •  
  •   palmers May 7, 2019 3888 views
    This topic created in 2550 days ago, the information mentioned may be changed or developed.

    首先数字匹配是一定的 整数或小数,但是网上找到的匹配正则大都不能过滤如下情况:

    • 01.11, 02.12 等
    • 02 ,087 等

    允许是 0.0 或 0

    谢谢大家了~

    23 replies    2019-05-08 20:05:47 +08:00
    AX5N
        1
    AX5N  
       May 8, 2019
    你是不允许首字母是 0 吗?那写成两段不就得了,0 开头和非 0 开头的,用「或」连接
    palmers
        2
    palmers  
    OP
       May 8, 2019
    @AX5N 我正则一塌糊涂 能麻烦您把正则写出来吗?
    weixiangzhe
        3
    weixiangzhe  
       May 8, 2019
    /^([1-9]\d*|0)(\.\d+)?$/
    cydysm
        5
    cydysm  
       May 8, 2019 via iPhone
    @weixiangzhe 这个网站下面的流程图棒!
    lastpass
        6
    lastpass  
       May 8, 2019 via Android   1
    →_→你先.number 不就好?
    lastpass
        7
    lastpass  
       May 8, 2019 via Android   1
    在校验之前先转换为标准的数字类型。
    不要拿个字符串就来正则匹配。
    →_→你说的这些问题就不根本不存在。
    palmers
        8
    palmers  
    OP
       May 8, 2019
    @weixiangzhe 非常感谢! 您给的地址挺好用的 很清晰 对我很有帮助 我需要匹配整数位和小数位最多 n 位,n 是动态可调整的 所以我改了一下,不知道对不对, 麻烦您帮我看一下:
    /^(?:([1-9]\d{0,1}|0))(?:\.\d{0,2})?$/
    上面正则可以匹配:
    0. 整数 0
    1. 整数 20, 20.0
    2. 小数 整数部分和小数部分分别最多 2 位 20.20 , 0.01, 12.22

    麻烦您了
    palmers
        9
    palmers  
    OP
       May 8, 2019
    @lastpass 我需求是这样的,input 中输入, 如果不是空字符, 就会进行校验,在 onChange 中,不允许用户输入不符合规则的字符 比如非数字(.除外) , 0 后面紧跟着是数字等
    imdong
        10
    imdong  
       May 8, 2019
    https://regex101.com/r/9mvoSw/1
    楼主看下这个正则表达式符合不


    ^(?!0[0-9])[0-9]+(\.(?>[0-9])[0-9]{0,5})?$
    lastpass
        11
    lastpass  
       May 8, 2019 via Android
    回复 @palmers 是哒,你加个 .number 修饰符就好呀。用户在输入的非数字字符会直接忽略的。对应这些校验。还是推荐 async-validator,像这种数字校验,直接
    { required: true, message: '不能为空'},
    { type: 'number', message: '必须为数字值'}
    就好。
    palmers
        12
    palmers  
    OP
       May 8, 2019
    @imdong 可是 js 不支持 ?>
    palmers
        13
    palmers  
    OP
       May 8, 2019
    @lastpass 我刚查了一下 您说的这个是 vue 的 **.number 啊? 我没有使用 vue 是 react 也是第一次使用 react 所以也不清楚 rect 有没有这个修饰符, 目前我没有知道对应资料 显示 react 有在 jsx 上支持**.number 修饰符
    weixiangzhe
        14
    weixiangzhe  
       May 8, 2019
    jinhan13789991
        15
    jinhan13789991  
       May 8, 2019
    你应该给出待匹配的文本,然后我们才好针对做处理啊~
    lastpass
        16
    lastpass  
       May 8, 2019 via Android
    @palmers 一样哒,.number 就是 parseInt/Float(value)呀。如果没有,自己就多写一行代码啦( ω )
    palmers
        17
    palmers  
    OP
       May 8, 2019
    @weixiangzhe 好的 非常感谢!
    cpdyj0
        18
    cpdyj0  
       May 8, 2019
    推荐下这个工具 https://regex101.com
    还可以 debug,优化
    palmers
        19
    palmers  
    OP
       May 8, 2019
    @cpdyj0 上面的 ver @imdong 给的就是这个工具 挺好用的 谢谢~
    imdong
        20
    imdong  
       May 8, 2019
    @palmers 试一下我发的 Version 3 经过测试 是可以 js 跑的了.

    ^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,5})?$
    SakuraKuma
        21
    SakuraKuma  
       May 8, 2019
    为啥, 要用正则?
    input[type=number][step=0.01]
    palmers
        22
    palmers  
    OP
       May 8, 2019
    @imdong 嗯嗯 这个是可以的
    palmers
        23
    palmers  
    OP
       May 8, 2019
    @SakuraKuma 您说的这个我不懂, 我不是的前端开发 看不明白您这个
    About     Help     Advertise     Blog     API     FAQ     Solana     2369 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 01:52 PVG 09:52 LAX 18:52 JFK 21:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86