fix(Field): disallow minus when using digit type (#7114)

This commit is contained in:
neverland 2020-09-05 14:54:05 +08:00 committed by GitHub
parent b62c0e32cf
commit e7deea7195
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 17 deletions

View File

@ -301,8 +301,8 @@ export default createComponent({
}
if (this.type === 'number' || this.type === 'digit') {
const allowDot = this.type === 'number';
value = formatNumber(value, allowDot);
const isNumber = this.type === 'number';
value = formatNumber(value, isNumber, isNumber);
}
if (this.formatter && trigger === this.formatTrigger) {

View File

@ -4,26 +4,34 @@ export function range(num: number, min: number, max: number): number {
function trimExtraChar(value: string, char: string, regExp: RegExp) {
const index = value.indexOf(char);
if (index === -1) {
return value;
return value;
}
if (char === '-' && index !== 0) {
return value.slice(0, index);
return value.slice(0, index);
}
return value.slice(0, index + 1) + value.slice(index).replace(regExp, '');
}
export function formatNumber(value: string, allowDot?: boolean) {
export function formatNumber(
value: string,
allowDot = true,
allowMinus = true
) {
if (allowDot) {
value = trimExtraChar(value, '.', /\./g);
} else {
value = value.split('.')[0];
}
value = trimExtraChar(value, '-', /-/g);
if (allowMinus) {
value = trimExtraChar(value, '-', /-/g);
} else {
value = value.replace(/-/, '');
}
const regExp = allowDot ? /[^-0-9.]/g : /[^-0-9]/g;

View File

@ -99,19 +99,20 @@ test('isNumeric', () => {
});
test('formatNumber', () => {
expect(formatNumber('abc')).toEqual('');
expect(formatNumber('1.2')).toEqual('1');
expect(formatNumber('abc1.2')).toEqual('1');
expect(formatNumber('123.4.')).toEqual('123');
// with dot
expect(formatNumber('abc', true)).toEqual('');
expect(formatNumber('1.2', true)).toEqual('1.2');
expect(formatNumber('abc1.2', true)).toEqual('1.2');
expect(formatNumber('123.4.', true)).toEqual('123.4');
expect(formatNumber('abc')).toEqual('');
expect(formatNumber('1.2')).toEqual('1.2');
expect(formatNumber('abc1.2')).toEqual('1.2');
expect(formatNumber('123.4.')).toEqual('123.4');
// without dot
expect(formatNumber('1.2', false)).toEqual('1');
expect(formatNumber('abc1.2', false)).toEqual('1');
expect(formatNumber('123.4.', false)).toEqual('123');
// minus
expect(formatNumber('-1.2')).toEqual('-1');
expect(formatNumber('-1.2', false)).toEqual('-1');
expect(formatNumber('-1.2', false, false)).toEqual('1');
expect(formatNumber('-1.2', true)).toEqual('-1.2');
expect(formatNumber('-1.2-', true)).toEqual('-1.2');
expect(formatNumber('123-')).toEqual('123');