user2338652
user2338652

Reputation: 467

Regular expression for price validation

Need regular expression which have:

  1. Maximum 8 digits before decimal(.) point
  2. Maximum 4 digits after decimal point
  3. Decimal point is optional

Maximum valid decimal is 8 digits before decimal and 4 digits after decimal So 99999999.9999

The regular rexpression I have tried ^\d{0,8}[.]?\d{1,4}$ is failing for 123456789 and more than this. means it is taking more than 8 digits if decimal point is not available.

Tested here : http://regexpal.com/

Many many thanks in advance!

Upvotes: 12

Views: 35538

Answers (7)

Ozal  Zarbaliyev
Ozal Zarbaliyev

Reputation: 638

For price validation we can not allow inputs with leading repeating zeros like 0012 etc.

My solution check for any cases. Also it allows maximum 2 decimal point after the dot.

^(?:0\.[0-9]{1,2}|[1-9]{1}[0-9]*(\.[0-9]{1,2})?|0)$

price input regex expression

Upvotes: 0

Hasitha Jayawardana
Hasitha Jayawardana

Reputation: 2436

This regex is working for most cases even negative prices,

(\-?\d+\.?\d{0,2})

Tested with the following,

9
9.97
37.97
132.97
-125.55
12.2
1000.00
10000.00
100000.00
1000000.00
401395011

If there is a price of $9.97, £9.97 or €9.97 it will validate 9.97 removing the symbol.

Upvotes: 1

RoccoDen91
RoccoDen91

Reputation: 185

I'm using this:

^[1-9]\d{0,7}(\.\d{1-4})$

^ = the start of the string

[1-9] = at least the string has to begin with 1 number between 1 and 9

\d{0,7} = optional or max 7 times d (digit: a number between 0 and 9)

() = create a group like a substring

. = need a .

\d{1-4} = digit repited max 4 time

$ end of the string

Upvotes: 0

Muhammad Waqas
Muhammad Waqas

Reputation: 1

1-(\$+.[1-9])
2-(\£+.
[1-9]) You can use this expression for complete price digits.

Upvotes: 0

Sadee
Sadee

Reputation: 3180

Any of the above did not work for me. Only this works for me

^([0-9]{0,2}((.)[0-9]{0,2}))$

Upvotes: 4

digitil
digitil

Reputation: 919

^\d{0,8}(\.\d{1,4})?$

You can make the entire decimal optional

Upvotes: 14

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89639

You can try this:

^\d{1,8}(?:\.\d{1,4})?$

or

^[1-9]\d{0,7}(?:\.\d{1,4})?$

If you don't want to have a zero as first digit.

You can allow this if you want: (.1234)

^[1-9]\d{0,7}(?:\.\d{1,4})?|\.\d{1,4}$

Upvotes: 8

Related Questions