2015-07-17 3 views
1

Строка должна начинаться с 3 или 4 букв (а не цифр), а символ «:» должен следовать этим буквам, а после двоеточия должно быть еще три символа, например AAA , Например, AAAA:AAA или AAA:AAA.Регулярное выражение в соответствии с шаблоном «AAAA: AAA»

Я начинаю строить это, но регулярное выражение - это так много боли для меня, может ли кто-нибудь помочь мне с этим?

Вот что я сейчас:

^[a-zA-Z]{3,4}(:)$ 
+2

Посмотрите это: _https: //regex101.com/r/uD7qO3/1_ –

ответ

4

Ваше регулярное выражение почти нет: вам нужно добавить [a-zA-Z]{3}. Я предпочитаю [[:alpha:]] POSIX class in Ruby, чтобы соответствовать буквам.

/[[:alpha:]]/ - Alphabetic character

POSIX bracket expressions are also similar to character classes. They provide a portable alternative to the above, with the added benefit that they encompass non-ASCII characters.

Итак, вот возможно регулярное выражение:

\A[[:alpha:]]{3,4}:[[:alpha:]]{3}\z 

См demo

регулярное выражение матча:

  • \A - начало строки (в RoR, вы должны используйте \A вместо ^, или вы получите ошибки)
  • [[:alpha:]]{3,4} - 3 или 4 буквы
  • : - буквальные :
  • [[:alpha:]]{3} - 3 буквы
  • \z - конец строки (в RoR, вы должны использовать \z вместо $, или вы получите сообщение об ошибке)

чтобы разрешить только AAA или AAAA, вам необходимо ввести дополнительный (? квантор) нон-захвата группы ((?:...) строительство):

\A[[:alpha:]]{3,4}(?::[[:alpha:]]{3})?\z 
        ^^^    ^^  

См another demo

+0

Thats work, но в ruby ​​on rails у меня есть ошибка - ArgumentError: предоставленное регулярное выражение использует многострочные якоря (^ или $), что может представлять угрозу безопасности. Вы имели в виду использовать \ A и \ z или забыли добавить параметр: multiline => true? Можете ли вы исправить это? –

+0

Используйте '\ A' и' \ z'. Это очень известная проблема, поэтому я добавил, что в моем описании regex. Я обновил ответ. –

+0

Спасибо, и в конце концов, это возможно сделать его действительным? AAA и AAAA, без двоеточия, или если присутствует двоеточие, следующие буквы должны быть 3 или менее, но не более. –

3

Попробуйте использовать это (кавычки, если регулярное выражение в вашем диалекте должен быть передан в виде строки)

"^[a-zA-Z]{3,4}:[a-zA-Z]{3}$" 
Смежные вопросы