Validating javascript decimal numbers

I'm using the following regexp to validate numbers in my javascript file:

var valid = (val.match(/^\d+$/));

It works fine for whole numbers like 100, 200, etc, however for things like 1.44, 4.11, etc, it returns false. How can I change it so numbers with a decimal are also accepted?

Answers:

Answer
var valid = (val.match(/^\d+(?:\.\d+)?$/));

Matches:

 1  : yes
 1.2: yes
-1.2: no
+1.2: no
  .2: no
 1. : no

var valid = (val.match(/^-?\d+(?:\.\d+)?$/));

Matches:

 1  : yes
 1.2: yes
-1.2: yes
+1.2: no
  .2: no
 1. : no

 var valid = (val.match(/^[-+]?\d+(?:\.\d+)?$/));

Matches:

 1  : yes
 1.2: yes
-1.2: yes
+1.2: yes
  .2: no
 1. : no

var valid = (val.match(/^[-+]?(?:\d*\.?\d+$/));

Matches:

 1  : yes
 1.2: yes
-1.2: yes
+1.2: yes
  .2: yes
 1. : no

var valid = (val.match(/^[-+]?(?:\d+\.?\d*|\.\d+)$/));

Matches:

 1  : yes
 1.2: yes
-1.2: yes
+1.2: yes
  .2: yes
 1. : yes
Answer

try this:

^[-+]?\d+(\.\d+)?$
Answer

isNaN seems like a better solution to me.

> isNaN('1')
false
> isNaN('1a')
true
> isNaN('1.')
false
> isNaN('1.00')
false
> isNaN('1.03')
false
> isNaN('1.03a')
true
> isNaN('1.03.0')
true
Answer

If you want to accept decimals (including <1) and integers, with optional + or - signs, you could use valid=Number(val).

Or a regexp:

valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val);
Answer

!isNaN(text) && parseFloat(text) == text

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.