diff --git a/src/lib/isFloat.js b/src/lib/isFloat.js index 84bdc782c..330b347f4 100644 --- a/src/lib/isFloat.js +++ b/src/lib/isFloat.js @@ -2,15 +2,19 @@ import assertString from './util/assertString'; import isNullOrUndefined from './util/nullUndefinedCheck'; import { decimal } from './alpha'; +const regExIsFloat = (str, options) => { + const float = new RegExp(`^(?:[-+])?(?:[0-9]+)?(?:\\${options.locale ? decimal[options.locale] : '.'}[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$`); + return float.test(str); +} + export default function isFloat(str, options) { assertString(str); options = options || {}; - const float = new RegExp(`^(?:[-+])?(?:[0-9]+)?(?:\\${options.locale ? decimal[options.locale] : '.'}[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$`); if (str === '' || str === '.' || str === ',' || str === '-' || str === '+') { return false; } const value = parseFloat(str.replace(',', '.')); - return float.test(str) && + return (options.locale ? regExIsFloat(str) : (!isNaN(value) || regExIsFloat(str)) ) && (!options.hasOwnProperty('min') || isNullOrUndefined(options.min) || value >= options.min) && (!options.hasOwnProperty('max') || isNullOrUndefined(options.max) || value <= options.max) && (!options.hasOwnProperty('lt') || isNullOrUndefined(options.lt) || value < options.lt) &&