Я использую следующий regexp для проверки чисел в моем файле JavaScript:
var valid = (val.match(/^\d+$/));
Это хорошо работает для целых чисел как 100, 200, и т.д., однако для вещей как 1,44, 4.11, и т.д., это возвращает false. Как я могу изменить его так, числа с десятичным числом также приняты?
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
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
Если вы хотите принимать десятичные дроби (включая <1) и целые числа с необязательными знаками + или -, вы можете использовать valid = Number (val).
Или регулярное выражение:
valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val);