DEV Community

JP Antunes
JP Antunes

Posted on

Valid Number

The valid number problem currently has the lowest acceptance rate of Leetcode at just 14.9%. That must mean it's hard right?

This one reminded me of my Perl days because somehow it's 3 AM and I'm having fun with regular expressions :-)

/** * @param {string} s * @return {boolean} */ var isNumber = function(s) { const trimRegex = /(^\s+|\s+$)/g; const trimedS = s.replace(trimRegex, '') if (trimedS.length == 0) return false; const validCharsRegex = /[0-9e+-.]/; if (![...trimedS].every(e => e.match(validCharsRegex))) return false; const invalidPatternsRegex = /(^\.e|^\.$|^e.*?|e.+?\.+?|\..+?\.|.+?e$|\d+?[+-]\d.?|[+-]+?\.$|.+?[+-]$|.+?e+?.*?e+?|\+[e+-]+?|\-[e+-]+?|\.[.+-]+?|e\.+?)/gi; if (trimedS.match(invalidPatternsRegex)) return false; return true; }; 

Short, and hopefully correct description of the scary regex:

const invalidPatternsRegex = / (^\.e -> . at the beginning of string followed by e |^\.$ -> only 1 . |^e.*? -> e at the beginning of string followed by any zero or more times |e.+?\.+? -> e 1 or more times followed by . 1 or more times |\..+?\. -> . followed by any 1 or more times followed by . |.+?e$ -> any 1 or more times followed by e at the end of string |\d+?[+-]\d.? -> [0-9] 1 or more times followed by either + or - followed by [0-9] 1 or more times |[+-]+?\.$ -> either + or - 1 or more times followed by . at the end of string |.+?[+-]$ -> any 1 or more times followed by either + or - at the end of string |.+?e+?.*?e+? -> any 1 or more times followed by e 1 or more times followed by any zero or more times followed by e 1 or more times |\+[e+-]+? -> + followed by either e or + or - 1 or more times |\-[e+-]+? -> - followed by either e or + or - 1 or more times |\.[.+-]+? -> . followed by either . or + or - 1 or more times |e\.+? -> e followed by any 1 or more times ) /gi; -> flags: global and case insensitive 

// Runtime: 76 ms, faster than 92.92% of JavaScript online submissions for Valid Number.
// Memory Usage: 37.5 MB, less than 12.50% of JavaScript online submissions for Valid Number.

Top comments (0)