RegEx для проверки целого числа с максимальной длиной 10 символов

Не могли бы вы указать мне соответствующий RegEx для проверки целого числа с максимальной длиной 10 символов?

Действующие включают: 1234567890

Ответы

Ответ 1

[+-]?[0-9]{1,10}

В словах: Необязательный + или - за которым следует цифра, повторяется один раз до десяти раз. Обратите внимание, что в большинстве библиотек есть ярлык для цифры: \d, поэтому вышеупомянутое может быть также записано как: \d{1,10}.

Ответ 2

Не забывайте, что целые числа могут быть отрицательными:

^\s*-?[0-9]{1,10}\s*$

Здесь смысл каждой части:

  • ^: Матч должен начинаться с начала строки
  • \s: любой символ пробела
    • *: Происходит ноль или более раз
  • -: символ дефис-минус, используемый для обозначения отрицательного целого числа
    • ?: Может или не может произойти
  • [0-9]: Любой символ, код ASCII (или код кода Unicode) находится между '0' и '9'
    • {1,10}: По крайней мере один, но не более десяти раз
  • \s: любой символ пробела
    • *: Происходит ноль или более раз
  • $: Матч должен заканчиваться в конце строки

Это игнорирует начальные и конечные пробелы и будет более сложным, если вы считаете, что допустимы запятые, или если вам нужно считать знак минус одним из десяти допустимых символов.

Ответ 3

От 1 до 10:

[0-9]{1,10}

В . NET (и не только, см. комментарий ниже) также действителен (с условием):

\d{1,10}

С#:

var regex = new Regex("^[0-9]{1,10}$", RegexOptions.Compiled);
regex.IsMatch("1"); // true
regex.IsMatch("12"); // true
..
regex.IsMatch("1234567890"); // true
regex.IsMatch(""); // false
regex.IsMatch(" "); // true
regex.IsMatch("a"); // false

P.S. Здесь очень полезная песочница.

Ответ 4

В большинстве языков, о которых я знаю, фактическое регулярное выражение для проверки должно быть ^[0-9]{1,10}$; в противном случае совпадение также будет возвращать положительные совпадения, если проверяемое число является частью более длинной строки.

Ответ 5

0123456789 не является допустимым целым числом (обычно нули будут удалены)

Я думаю, что что-то вроде этого regexp было бы лучше использовать:

^[1-9]([0-9]*)$

(не поддерживает подписанные числа)