3/7/2018 - 1:39 PM

currency regex

Matches $1,234.56, 1,234.56, 12, $1.21 etc

The RegEx

// Requires a decimal and commas

// Allows a decimal, requires commas

// Decimal and commas optional

// Decimals required, commas optional

// *Requires/allows X here also implies "used correctly"

The RegEx Breakdown

  • When the optional parts are too liberal, we need to look ahead and guarantee there's a number: (?=.*\d)
  • May or may not start with a dollar sign (I assume negatives are invalid): ^\$?
    • Follow that with -? to allow negative numbers
  • Begins with 1-3 numbers: [1-9]\d{0,2}
    • Could almost be (\d{1,3}), but that would allow "0,123" _ One exception, can start with 0 in the case of "$0.50" or "0.50": |0 _ These regexes assume multiple leading 0's are invalid
  • Any number of three digit numbers separated by comma: (,\d{3})*
    • Remove ? before \. if you want to disallow numbers starting with "$."
  • Requires or allows decimal (one or two digits): \.\d{1,2} or (\.\d{1,2})? respectively _ End with $ (unescaped) to make sure there's nothing after a valid number (like $1,000.00b)

To use the regex, use the string's match method and encase the regex between two forward slashes.

// The return will either be your match or null if not found

// For just a true/false response