2010-10-19 1 views
41

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

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

[0-9]{1,45} 

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

^[0-9]{45}*$ 

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

ответ

129

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

^[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 цифр, но эти цифры должны быть как в начале и в конце строки, эффективно оно должно быть всего входа.

+0

ahh спасибо, ca Вы объясните, что делают морковь и $ для этого выражения? Просто начинайте и заканчивайте строку? – NewToRegEx

+0

@NewToRegEx - да. Они не допускают появления каких-либо других символов до или после матча 1-45 цифр. – eumiro

+0

Это должен быть ответ? –

14

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

^\d{1,45}$ 

где \d является такой же, как [0-9].

+1

Если вы живете в мире юникода (что большинство людей делают), '\ d' ** не ** совпадает с' [0-9] '. '\ d' позволяет« 4 »и т. д. (и еще тысячам) соответствовать; '[0-9]' нет. –

3

Сочетание обоих попыток, вероятно, что вам нужно:

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

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

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

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

9

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

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

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

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

Полезно за умение вырезать 0! –

2

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

Смежные вопросы