Регулярное выражение, которое соответствует 25 символам и начинается с цифр.

У меня есть текстовое поле, которое мне нужно проверить с помощью регулярного выражения. Мое требование следующее:

CCCCNNNNNN или CCCCNNNNNNN (шаблон)

1234ABCDEFG или 123-ABCDEFG (пример строки)

Правила:

  • Вся строка не должна превышать 25 символов.
  • Первые четыре символа (СССС) должны быть буквенно-цифровыми.
  • ССС - это ровно 4 символа и может быть цифрами или числом.
  • CCCC может иметь знак тире в качестве 4-го символа.
  • NNNNNNNNNNNN может содержать до 21 символа и только цифры.

Например. AAAA 1234 A58- - допустимая строка дляCC.

Вот мои исследовательские заметки:

  • Сначала мне нужно сопоставить числа
  • Мне нужно будет указать + char, чтобы он соответствовал этому шаблону X раз
  • После этого мне нужно будет сопоставить буквы для 8-9 пробелов

Вот замечательный пост о шаблонах RegEx:

Сопоставление чисел с регулярными выражениями - только цифры и запятые

Моя цель - применить этот шаблон REGEX к маске текстового поля в приложении WinForms.


person Shawn J. Molloy    schedule 18.11.2011    source источник
comment
Я удалил свой ответ - вернитесь и напишите разумный вопрос.   -  person ObscureRobot    schedule 19.11.2011
comment
Извините, я уточнил свои требования. Надеюсь, это дает более четкое представление о том, что мне нужно.   -  person Shawn J. Molloy    schedule 19.11.2011
comment
не совсем достаточно: для меня первые четыре символа (СССС) должны быть буквенно-цифровыми, что означает либо ABCD, либо 1234, а требование NNNNNNNNNNNN может содержать до 21 символа, и только числа противоречат вашему примеру 1234ABCDEFG. тогда что конкретно означает I will need to match letters after that for 8-9 spaces?   -  person Code Jockey    schedule 19.11.2011
comment
попробуйте указать, что разрешено - и, если необходимо, что не разрешено - в форме, подобной комментариям в моем ответе   -  person Code Jockey    schedule 19.11.2011


Ответы (1)


....

....

... да - я думаю, что ответ, который вы ищете (я подчеркиваю "думаю"), заключается в следующем:

^[0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}$

это:

^               # assert beginning (not in the middle)
[0-9A-Za-z]{3}  # three characters that are: 0-9 or a-z (upper or lower)
[0-9A-Za-z-]    # one character that is: 0-9 or a-z (upper or lower) or a dash
\d{0,21}        # anywhere from 0 to 21 digits
$               # assert at the end (not somewhere in the middle

Если вы хотите сопоставить несколько случаев этого выражения, поместите указанное выше выражение (без утверждений) в скобки (()) вместе с тем, что разрешено для разделения этих значений - я выбрал \s или «пробел»), а затем используйте квантификатор +:

^([0-9A-Za-z]{3}[0-9A-Za-z-]\d{0,21}\s+)+$

будет соответствовать / проверять следующий ввод:

1234567890 AAAA123456789012345678901 GGG-123       hhh5   A1B2000000000

Если вам нужно что-то еще, вам придется задать более четкий вопрос (в вашем вопросе много противоречий и повторений, что делает его ОЧЕНЬ запутанным)

person Code Jockey    schedule 18.11.2011
comment
последнее, что я проверял, стандартный MaskedTextBox не использует регулярные выражения - person Code Jockey; 19.11.2011
comment
Спасибо, что попытались ответить на этот вопрос, несмотря на противоречия Кодекса Жокея; Я очистил свой вопрос, чтобы предоставить прямые требования к моим правилам проверки выражений. - person Shawn J. Molloy; 19.11.2011
comment
Элемент управления, который я использую, является сторонним элементом управления, который позволяет использовать маски MaskTypes и RegEx. - person Shawn J. Molloy; 19.11.2011
comment
@Shawn Насколько далеко до выражения (по крайней мере, на основании моего перефразирования требований) - что не так или что нужно немного изменить / подправить, добавить или удалить? - person Code Jockey; 19.11.2011
comment
Спасибо @CodeJockey, похоже, это то, что мне нужно для начала. Любые изменения в регулярном выражении я буду исследовать и реализовывать сам. Еще раз спасибо; Ваша помощь очень ценится. - person Shawn J. Molloy; 19.11.2011