Я пытаюсь использовать проверку правильного выражения для проверки только десятичных значений или числовых значений. Но пользователь вводит числовое значение, это не первая цифра "0"
Как это сделать?
Я пытаюсь использовать проверку правильного выражения для проверки только десятичных значений или числовых значений. Но пользователь вводит числовое значение, это не первая цифра "0"
Как это сделать?
Знак в диапазоне 1-9, за которым следуют ноль или более других цифр:
^[1-9]\d*$
Разрешить номера с необязательной десятичной запятой, за которыми следуют цифры. Цифра в диапазоне 1-9, за которой следуют ноль или более других цифр, затем необязательно, после чего следует десятичная точка, за которой следует не менее 1 цифры:
^[1-9]\d*(\.\d+)?$
Примечания:
Якорь ^
и $
для начала и конца в основном говорит, что вся строка должна соответствовать шаблону
()?
соответствует 0 или 1 всего объекта между скобками
Обновление для обработки запятых:
В регулярных выражениях .
имеет особое значение - соответствует любому одиночному символу. Чтобы соответствовать буквально .
в строке, вам нужно избежать .
с помощью \.
. Это значение \.
в regexp выше. Поэтому, если вы хотите использовать запятую, шаблон просто:
^[1-9]\d*(,\d+)?$
Дальнейшее обновление для обработки запятых и полных остановок
Если вы хотите разрешить . между группами цифр и , между интегральной и дробной частями, попробуйте:
^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$
то есть. это цифра в диапазоне 1-9, за которой следуют до двух других цифр, затем ноль или более групп полной остановки, за которыми следуют 3 цифры, а затем необязательно запятая и цифры, как раньше.
Если вы хотите разрешить . где-нибудь между цифрами, попробуйте:
^[1-9][\.\d]*(,\d+)?$
то есть. цифра 1-9, за которой следует ноль или более цифр или полных остановок, а затем запятая и одна или несколько цифр.
На самом деле, ни один из приведенных ответов не полностью покрывает запрос.
Поскольку ОП не предоставил конкретный вариант использования или типы чисел, я постараюсь охватить все возможные случаи и перестановки.
Это число обычно называют целым числом без знака, но вы также можете назвать его положительным не дробным числом, включая ноль. Это включает числа как 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, что означает, что любая фраза, заменяющая ...
не должна появляться перед этим утверждением. 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)$/
Проверьте это регулярное выражение
Некоторые могут захотеть поддержать в своих валидациях числа с научным характером 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
верующих, как и выше, за исключением того, что теперь оно запрещает такие номера, как -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
, -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,'');
}
У меня была та же проблема, но я также хотел, чтобы ".25" было допустимым десятичным числом. Вот мое решение с использованием JavaScript:
function isNumber(v) {
// [0-9]* Zero or more digits between 0 and 9 (This allows .25 to be considered valid.)
// ()? Matches 0 or 1 things in the parentheses. (Allows for an optional decimal point)
// Decimal point escaped with \.
// If a decimal point does exist, it must be followed by 1 or more digits [0-9]
// \d and [0-9] are equivalent
// ^ and $ anchor the endpoints so tthe whole string must match.
return v.trim().length > 0 && v.trim().match(/^[0-9]*(\.[0-9]+)?$/);
}
Где мой метод trim()
String.prototype.trim = function() {
return this.replace(/(^\s*|\s*$)/g, "");
};
Мэтью Десвоян
Я тестировал все заданные регулярные выражения, но, к сожалению, ни один из них не прошел эти тесты:
String []goodNums={"3","-3","0","0.0","1.0","0.1"};
String []badNums={"001","-00.2",".3","3.","a",""," ","-"," -1","--1","-.1","-0", "2..3", "2-", "2...3", "2.4.3", "5-6-7"};
Вот лучшее, что я написал, чтобы пройти все те тесты:
"^(-?0[.]\\d+)$|^(-?[1-9]+\\d*([.]\\d+)?)$|^0$"
Вот большое рабочее выражение для чисел. Это принимает число с запятыми и десятичными знаками.
/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
Вот мое регулярное выражение для проверки чисел:
^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$
Допустимые числа:
String []validNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
Недопустимые числа:
String []invalidNumbers={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
/([0-9]+[.,]*)+/
соответствует любому числу с или без /([0-9]+[.,]*)+/
или точек
это может соответствовать
122
122,354
122.88
112,262,123.7678
ошибка: она также соответствует 262.4377,3883 (но это не имеет значения, особенно)
Попробуйте этот код, надеюсь, что он вам поможет.
String regex = "(\\d+)(\\.)?(\\d+)?"; for integer and decimal like 232 232.12
если вам нужно проверить десятичное число с точками, запятыми, положительными и отрицательными, попробуйте следующее:
Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);
Удачи.
Ниже приведено идеальное для упомянутого требования:
^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$
как дать условие для A-103 этого типа выражения в регулярных выражениях?