Регулярные выражения позволяют строке содержать только цифры 0 - 9 и ограничивают длину до 45 - PullRequest
48 голосов
/ 19 октября 2010

Я пытаюсь создать регулярное выражение, чтобы строка содержала только 0-9 в качестве символов, и она должна быть длиной не менее 1 символа и не более 45.поэтому пример будет 00303039 будет совпадением, а 039330a29 - нет.

Пока это то, что у меня есть, но я не уверен, что это правильно

[0-9]{1,45} 

Я также пытался

^[0-9]{45}*$

, но это тоже не работает.Я не очень знаком с регулярными выражениями, поэтому любая помощь будет отличной.Спасибо!

Ответы [ 7 ]

141 голосов
/ 19 октября 2010

Вы почти там, все, что вам нужно, это начальная привязка (^) и конечная привязка ($):

^[0-9]{1,45}$

\d - это сокращение от класса символов [0-9].Вы можете использовать это как:

^\d{1,45}$

Якоря заставляют шаблон соответствовать всему входу, а не только части этого.


Ваше регулярное выражение [0-9]{1,45} ищет от 1 до 45 цифр, поэтому строка типа foo1 также сопоставляется, так как содержит 1.

^[0-9]{1,45} ищет от 1 до 45 цифр, но эти цифры должнынаходиться на начале ввода.Он соответствует 123, но также 123foo

[0-9]{1,45}$ ищет от 1 до 45 цифр, но эти цифры должны быть на конце входа.Он соответствует 123, но также foo123

^[0-9]{1,45}$ ищет от 1 до 45 цифр, но эти цифры должны быть оба в начале и в концеввода, по сути, он должен быть весь вход.

14 голосов
/ 19 октября 2010

Первый соответствует любому количеству цифр в вашей строке (допускаются и другие символы, т. Е. «039330a29»). Второй допускает только 45 цифр (и не менее). Так что возьмите лучшее от обоих:

^\d{1,45}$

, где \d такое же, как [0-9].

10 голосов
/ 11 июля 2013

Используйте это регулярное выражение, если вы не хотите начинать с нуля:

^[1-9]([0-9]{1,45}$)

Если вы не против начать с нуля, используйте:

^[0-9]{1,45}$
5 голосов
/ 19 октября 2010

Кодаддикт предоставил правильный ответ.Что касается того, что вы пытались, я объясню, почему они не делают разрез:

  • [0-9]{1,45} почти там, но это соответствует 1 к 45-цифровая строка , даже если она встречается внутри другой более длинной строки, содержащей другие символы .Следовательно, вам нужно ^ и $, чтобы ограничить его точным соответствием.

  • ^[0-9]{45}*$ соответствует ровно 45-значный строке, повторяется 0 или любое количество раз*).Это означает, что длина строки может быть только 0 или кратна 45 (90, 135, 180 ...).

4 голосов
/ 19 октября 2010

Возможно, вам нужна комбинация обеих попыток:

^[0-9]{1,45}$
2 голосов
/ 05 апреля 2014

Rails не нравится использование ^ и $ по некоторым соображениям безопасности, вероятно, лучше использовать \ A и \ z для установки начала и конца строки

2 голосов
/ 19 октября 2010

^[0-9]{1,45}$ правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...