@erfffun/utils
Version:
Energi javascript utilities for web development
43 lines (37 loc) • 1.26 kB
JavaScript
import getNumberSeparators from '../getNumberSeparators';
const REG_PATTERN_INTEGER = /^(([-]?[1-9][0-9]*)|0)$/;
const REG_PATTERN_INTEGER_ABS = /^(([1-9][0-9]*)|0)$/;
const PATTER_FLOAT_PART = '(([1-9][0-9]*)|0))?(\\';
const PATTERN_FLOAT_START = `^([-]?${PATTER_FLOAT_PART}`;
const PATTERN_FLOAT_START_ABS = `^(${PATTER_FLOAT_PART}`;
const PATTERN_FLOAT_END = '[0-9]+)?$';
export const isValidInteger = (value, { onlyPositive }) => {
if (typeof value !== 'string') {
return false;
}
return onlyPositive
? REG_PATTERN_INTEGER_ABS.test(value)
: REG_PATTERN_INTEGER.test(value);
};
export const isValidFloat = (
value,
{ onlyPositive, acceptTrailingDecimal },
) => {
if (typeof value !== 'string') {
return false;
}
// eslint-disable-next-line prefer-destructuring
const decimalSeparator = getNumberSeparators.decimalSeparator;
const REG_PATTERN_FLOAT = new RegExp(
(onlyPositive ? PATTERN_FLOAT_START_ABS : PATTERN_FLOAT_START) +
decimalSeparator +
PATTERN_FLOAT_END,
);
if (acceptTrailingDecimal && value.endsWith(decimalSeparator)) {
const shortenedValue = value.substr(0, value.length - 1);
if (!shortenedValue.includes(decimalSeparator)) {
value = shortenedValue;
}
}
return REG_PATTERN_FLOAT.test(value);
};