2014-01-16 2 views
1

Мне нужно написать регулярное выражение, чтобы оно соответствовало конкретному шаблону кода: строка, которая должна соответствовать, содержит 18 целых символов, и мне нужно проверить, есть ли в первой позиции 0, а во втором - 8 или 9. Я написал это выражение, но оно не работает:Регулярное выражение для ссылочного номера

Regex regex = new Regex(@"^(.{0}[0]{1}[8,9])(^\d{18}$)"); 
     string compare = "082008014385161873"; 
     if (regex.IsMatch(compare)) 
     { 
      //true 
     } 

Кто-нибудь может мне помочь?

+0

Возможно, вы уже это делаете, но в наши дни есть несколько действительно полезных онлайн-тестеров, где вы можете итеративно уточнить свою работу и выявить проблемы. http://regex101.com/ - хороший. И они позволяют постоянным отношениям делиться работой. Вот ваше выражение: http://regex101.com/r/pR7cA0 –

ответ

1

Попробуйте это регулярное выражение. Это делает следующее:

  • Проверяется первую цифру 0, как
  • Проверяется вторую цифру как 8 или 9
  • Проверяется, что 16 больше цифр следуют первые 2 цифры

.

^0[89]\d{16}$ 
1

Используйте следующее регулярное выражение:

^0[89]\d{16}$ 

Альтернатива с использованием позитивного опережения утверждение:

^(?=0[89])\d{18}$ 
+0

Почему мне нужно поставить 16, если длина строки должна составлять 18? – Sara

+2

Поскольку цифры 0 и (8 или 9) являются двумя другими цифрами. 1 + 1 + 16 = 18. –

+0

@Sara, '0 [89]' потребляет две строки, а положительное утверждение поиска (? = 0 [89]) 'не потребляет. – falsetru

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