На самом деле ни один из приведенных ответов не полностью покрывает запрос.
Поскольку ОП не предоставил конкретный вариант использования или типы чисел, я постараюсь охватить все возможные случаи и перестановки.
Обычные номера
Всего положительных
Это число обычно называется целое число без знака , но вы также можете назвать его положительным не дробным числом, включая ноль. Это включает числа как 0
, 1
и 99999
.
Регулярное выражение, охватывающее эту проверку:
/^(0|[1-9]\d*)$/
Проверьте это регулярное выражение
Всего положительных и отрицательных
Этот номер обычно называется целое число со знаком , но вы также можете назвать его не дробным числом. Это включает числа как 0
, 1
, 99999
, -99999
, -1
и -0
.
Регулярное выражение, охватывающее эту проверку:
/^-?(0|[1-9]\d*)$/
Проверьте это регулярное выражение
Как вы, наверное, заметили, я также включил -0
в качестве действительного числа. Но некоторые могут поспорить с этим использованием и сказать, что это не реальное число (подробнее о Signed Zero можно прочитать здесь ). Итак, если вы хотите исключить это число из этого регулярного выражения, вот что вы должны использовать вместо этого:
/^-?(0|[1-9]\d*)(?<!-0)$/
Проверьте это регулярное выражение
Все, что я добавил, это (?<!-0)
, что означает не включать -0
перед этим утверждением. Это (?<!...)
утверждение, называемое отрицательный взгляд за , что означает, что любая фраза, заменяющая ...
, не должна появляться перед этим утверждением. Lookbehind имеет ограничения, например, фраза не может содержать квантификаторы. Вот почему в некоторых случаях я буду использовать Lookahead, который такой же, но в противоположном направлении.
Многие разновидности регулярных выражений, в том числе используемые в Perl и Python, допускают только строки фиксированной длины. Вы можете использовать буквальный текст, экранирование символов, экранирование Unicode, отличное от \X
, и классы символов. Вы не можете использовать квантификаторы или обратные ссылки. Вы можете использовать чередование, но только если все альтернативы имеют одинаковую длину. Эти ароматы оценивают взгляд сзади, сначала возвращаясь назад через строку темы на столько символов, сколько нужно взгляду сзади, а затем пытаясь выполнить регулярное выражение внутри взгляда слева направо.
Вы можете прочитать больше об утверждениях Lookaround здесь .
Дробные числа
Положительный
Это число обычно называется без знака с плавающей запятой или без знака двойного , но вы также можете назвать его положительным дробным числом, включая ноль. Это включает в себя числа, такие как 0
, 1
, 0.0
, 0.1
, 1.0
, 99999.000001
, 5.10
.
Регулярное выражение, охватывающее эту проверку:
/^(0|[1-9]\d*)(\.\d+)?$/
Проверьте это регулярное выражение
Некоторые могут сказать, что числа типа .1
, .0
и .00651
(как и 0.1
, 0.0
и 0.00651
соответственно) также являются действительными дробными числами, и я не могу с ними не согласиться. Итак, вот регулярное выражение, которое дополнительно поддерживает этот формат:
/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
Проверьте это регулярное выражение
Отрицательный и положительный
Этот номер обычно называется со знаком с плавающей запятой или со знаком двойной , но вы также можете назвать его дробным числом. Сюда входят числа типа 0
, 1
, 0.0
, 0.1
, 1.0
, 99999.000001
, 5.10
, -0
, -1
, -0.0
, -0.1
, -99999.000001
, 5.10
.
Регулярное выражение, охватывающее эту проверку:
/^-?(0|[1-9]\d*)(\.\d+)?$/
Проверьте это регулярное выражение
Для не -0
верующих:
/^(?!-0(\.0+)?$)-?(0|[1-9]\d*)(\.\d+)?$/
Проверьте это регулярное выражение
Для тех, кто хочет также поддерживать невидимые нулевые представления, такие как .1
, -.1
, используйте следующее регулярное выражение:
/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
Проверьте это регулярное выражение
Сочетание не -0
верующих и невидимых нулевых верующих, используйте это регулярное выражение:
/^(?!-0?(\.0+)?$)-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)$/
Проверьте это регулярное выражение
Числа с научной нотацией (AKA Exponential Notation)
Некоторые могут захотеть поддержать в своих валидациях числа с научным характером e
, что, кстати, является абсолютно действительным числом, оно создано для краткого представления очень длинных чисел. Вы можете прочитать больше о научной нотации здесь . Эти числа обычно выглядят как 1e3
(что составляет 1000
), 1e-3
(что составляет 0,001) и полностью поддерживаются многими основными языками программирования (например, JavaScript). Вы можете проверить это, проверив, возвращает ли выражение '1e3'==1000
true
.
Я разделю поддержку всех вышеперечисленных разделов, в том числе номера с научными обозначениями.
Обычные номера
Проверка регулярных выражений для целых положительных чисел, поддерживает такие числа, как 6e4
, 16e-10
, 0e0
, но также и обычные числа, такие как 0
, 11
:
/^(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Проверка регулярного выражения целых положительных и отрицательных чисел, поддерживает такие числа, как -6e4
, -16e-10
, -0e0
, но также и обычные числа, такие как -0
, -11
и все целые положительные числа, указанные выше:
/^-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Проверка регулярного выражения целых положительных и отрицательных чисел для не -0
верующих, такая же, как указано выше, за исключением того, что теперь она запрещает такие числа, как -0
, -0e0
, -0e5
и -0e-6
:
/^(?!-0)-?(0|[1-9]\d*)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Дробные числа
Проверка регулярного выражения положительного числа, поддерживает также целые числа, указанные выше, плюс такие числа, как 0.1e3
, 56.0e-3
, 0.0e10
и 1.010e0
:
/^(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Положительное число с проверкой регулярного выражения невидимого нуля, поддерживает также вышеуказанные положительные числа, в дополнение к таким номерам, как .1e3
, .0e0
, .0e-5
и .1e-7
:
/^(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Проверка регулярного выражения отрицательных и положительных чисел, поддерживает положительные числа, указанные выше, но также такие числа, как -0e3
, -0.1e0
, -56.0e-3
и -0.0e10
:
/^-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Проверка регулярного выражения отрицательных и положительных чисел для не -0
верующих, такая же, как указано выше, за исключением того, что теперь она запрещает такие числа, как -0
, -0.00000
, -0.0e0
, -0.00000e5
и -0e-6
:
/^(?!-0(\.0+)?(e|$))-?(0|[1-9]\d*)(\.\d+)?(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Отрицательное и положительное число с проверкой регулярных выражений невидимого нуля, поддерживает также вышеуказанные положительные и отрицательные числа, в дополнение к таким номерам, как -.1e3
, -.0e0
, -.0e-5
и -.1e-7
:
/^-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Отрицательное и положительное число с комбинацией не -0
верующих и невидимых нулевых верующих, такое же, как указано выше, но запрещает такие номера, как -.0e0
, -.0000e15
и -.0e-19
:
/^(?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?$/i
Проверьте это регулярное выражение
Числа с шестнадцатеричным представлением
Во многих языках программирования строковое представление шестнадцатеричного числа, например 0x4F7A
, может быть легко приведено к десятичному числу 20346
.
Таким образом, кто-то может захотеть поддержать это в своем сценарии проверки.
Следующее регулярное выражение поддерживает только шестнадцатеричные представления чисел:
/^0x[0-9a-f]+$/i
Проверьте это регулярное выражение
Все перестановки
Эти последние регулярные выражения поддерживают невидимые нулевые числа.
Подписавшие верующих нулей
/^(-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i
Проверьте это регулярное выражение
Не подписавшие верующих нулей
/^((?!-0?(\.0+)?(e|$))-?(0|[1-9]\d*)?(\.\d+)?(?<=\d)(e-?(0|[1-9]\d*))?|0x[0-9a-f]+)$/i
Проверьте это регулярное выражение
Надеюсь, я рассмотрел все перестановки чисел, которые поддерживаются во многих языках программирования.
Удачи!
О, забыл упомянуть, что те, кто хочет проверить число, включает разделитель тысяч, сначала вы должны очистить все запятые (,
), так как там может быть разделитель любого типа, вы не можете на самом деле покрыть их всех.
Но вы можете удалить их сначала, до проверки номера:
//JavaScript
function clearSeparators(number)
{
return number.replace(/,/g,'');
}
Подобный пост в моем блоге .