关于表单正则的问题?

关于正则表达式这块也是弱得可怜呀我,望各位大佬赐教!

我先说需求吧。如题:
要求1:必须是数字类型,可以是正整数,也可以是浮点数
要求2:当为正整数时,不能以0开头的正整数,比如01,0023等
要求3:当为浮点数时,保留位数不限

正确的例子:334526...,0.00102...,1.2220...,10.121234...,

我写了几个都行不通,不知道怎么整了!!!
/^\d+(.\d+)?$/

阅读 2k
3 个回答

一般来说我都是从 正则大全 里面找的,VS Code也有这个插件可以用 any-rule

image.png

快速找了一下有一个类似的稍微修改了一下,去掉了小数位数限制。
应该可以直接用 /(?:(^[1-9]([0-9]+)|^[0-9])(?:\.[0-9]{1,})?$)|(?:^(?:0)$)/

const test = (val) => /(?:(^[1-9]([0-9]+)|^[0-9])(?:\.[0-9]{1,})?$)|(?:^(?:0)$)/.test(val)

test(334526)
// true
test(0.00102)
// true
test(1.2220)
// true
test(10.121234)
// true
test(0)
// true
test(0123)
// true
test('0123')
// false
test('123')
// true

但是如果你输入的是 test(0123) 那么将会返回 true 因为数字类型的 0123 会被认为是 83,所以在测试时候需要使用 test('0123')
具体为什么?我提了一个新问题,你可以移步了解 👉 JS中console.log(0123)为什么会输出83?


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
var isNumber = RegExp.prototype.test.bind(/^(0|[1-9]\d*)(\.\d+)?$/);
console.log(isNumber("01"));
console.log(isNumber("0023"));
console.log(isNumber("334526"));
console.log(isNumber("0.00102"));
console.log(isNumber("10.121234"));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题