狗尾续貂: 正则验证数字或小数,绝对有挑战

SecondPersonX
  • 177

蛮有意思的一道关于正则的题

看到上面一道关于regex的题目,蛮有意思的,我使用JavaScript实现了一下,但不清楚是否有bugs,而且我还是想使用一个regex语句来实现,但百思不得其解。请教大家了。

下面是JavaScript的实现

'use strict';

function match(str) {
    let result = str || '<null>';
    if (!/^[+-]?0*(\.0*)?$/.test(str) && /^[+-]?\d*(\.\d*)?$/.test(str)) {
        result += '\t - matched';
    } else {
        result += '\t - failed';
    }

    console.log(result);
}

match('');
match('000');
match('000.');
match('000.000');
match('.00');
match('.000');
match('1.21');
match('1.212');
match('.231');
match('21.');
match('21.23');
match('0');
match('0.00');
match('0.10');
match('1');
match('100');
match('0.01');
match('0.01');

<null>     - failed
000     - failed
000.     - failed
000.000     - failed
.00     - failed
.000     - failed
1.21     - matched
1.212     - matched
.231     - matched
21.     - matched
21.23     - matched
0     - failed
0.00     - failed
0.10     - matched
1     - matched
100     - matched
0.01     - matched
0.01     - matched
回复
阅读 2.3k
1 个回答
凌晨消失の夏日
  • 885
✓ 已被采纳

太简单了,不就是\d+(?:\.\d+)?排除掉0(\.0+)?吗

^(?!0(\.0+)?$)\d+(?:\.\d+)?$
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏