Если я не ошибаюсь, это должно соответствовать любому действительному значению числа JavaScript, исключая константы (Infinity
, NaN
) и операторы знака +
/ -
(потому что они на самом деле не являются частью число, насколько мне известно, это отдельные операторы):
Мне это понадобилось для токенизатора, где отправка числа в JavaScript для оценки не была возможной ... Это определенно не самое короткое возможное регулярное выражение, но я считаю, что оно улавливает все тонкости синтаксиса чисел в JavaScript.
/^(?:(?:(?:[1-9]\d*|\d)\.\d*|(?:[1-9]\d*|\d)?\.\d+|(?:[1-9]\d*|\d))
(?:[e]\d+)?|0[0-7]+|0x[0-9a-f]+)$/i
Действительные числа будут включать:
- 0
- 00
- 01
- 10
- 0e1
- 0e01
- .0
- 0.
- .0e1
- 0.e1
- 0.e00
- 0xf
- 0Xf
Неверные числа будут
- 00e1
- 01e1
- 00.0
- 00x0
- .
- .e0