2010-03-22 2 views
6

Я использую следующий регулярное выражение для проверки номера в моем файла JavaScript:Проверка JavaScript десятичных чисел

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

Он отлично работает для целых чисел, таких как 100, 200 и т.д., однако для таких вещей, как 1.44, 4.11, etc, он возвращает false. Как я могу его изменить, поэтому числа с десятичной запятой также принимаются?

ответ

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

совпадений:

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

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

соответствий:

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

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

Матчи:

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

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

Матчей:

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

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

Матчей:

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

попробовать это:

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

"4." является технически допустимым десятичным числом, но это регулярное выражение не будет соответствовать этому. Вы должны сделать цифры '\ d +' в группе необязательными. –

0

Если вы хотите принять десятичные (включая < 1) и целые числа, с необязательным + или - знаки, вы можете использовать действительный = Number (VAL).

Или регулярное выражение:

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

IsNaN кажется лучшим решением для меня.

> 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 
+0

отлично работает с положительным/отрицательным – seanmonstar

0

! IsNaN (текст) & & parseFloat (текст) == текст

Смежные вопросы