From a3479a323caa885baff12c590daeebb15aef42f4 Mon Sep 17 00:00:00 2001 From: sheepluo Date: Mon, 14 Aug 2023 14:07:19 +0800 Subject: [PATCH] fix(web): input-number input number validate (#1566) * fix(web): input-number input number validate * fix(web): canInputNumber --------- Co-authored-by: sheepluo --- js/input-number/number.ts | 6 +++--- test/unit/input-number/number.test.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/js/input-number/number.ts b/js/input-number/number.ts index 2ff87473b4..7b6bfb09f2 100644 --- a/js/input-number/number.ts +++ b/js/input-number/number.ts @@ -211,9 +211,9 @@ export function canInputNumber(number: string, largeNumber: boolean) { if (number.slice(0, 2) === '00') return false; // 只能出现一个点(.) if (number.match(/\./g)?.length > 1) return false; - // 只能出现一个负号(-),并且在第一个位置 - const minusSignCount = number.match(/-/g)?.length || 0; - if (minusSignCount > 1 || (minusSignCount === 1 && number[0] !== '-')) return false; + // 只能出现一个负号(-)或 一个正号(+),并且在第一个位置;但允许 3e+10 这种形式 + const tmpNumber = number.slice(1); + if (/(\+|-)/.test(tmpNumber) && !/e+/i.test(tmpNumber)) return false; // 允许输入数字字符 const isNumber = (largeNumber && isInputNumber(number)) || !Number.isNaN(Number(number)); if (!isNumber && !specialCode.includes(number.slice(-1))) return false; diff --git a/test/unit/input-number/number.test.js b/test/unit/input-number/number.test.js index e22e8e6969..04ce40927d 100644 --- a/test/unit/input-number/number.test.js +++ b/test/unit/input-number/number.test.js @@ -121,6 +121,7 @@ describe('canInputNumber', () => { it('normal number: number letters are allowed', () => { expect(canInputNumber('-')).toBe(true); expect(canInputNumber('1.3e')).toBe(true); + expect(canInputNumber('+1.22+++')).toBe(false); expect(canInputNumber('1.23E')).toBe(true); expect(canInputNumber('1.23E+')).toBe(true); expect(canInputNumber('1.23E+08')).toBe(true);