Использование RegEx для проверки ввода пользователя - PullRequest
1 голос
/ 09 марта 2020

РАЗРЕШЕНИЕ - Предоставлено Wiktor - я реализовал это в своем вопросе.

Проверка ввода пользователя, когда он печатает, чтобы соответствовать следующему формату - 11A11

    Private Sub RegexFormatterExample(sender As Object, e As EventArgs)

    Dim txt As TextBox = sender
    Dim pattern As String = ""

    Select Case txt.Name
        Case "txt_example"
            pattern = "^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?$"
        Case Else
            pattern = "^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?$"
    End Select

    Dim strText As String = txt.Text

    While Not Regex.IsMatch(strText, pattern) AndAlso Not strText = ""
        strText = strText.Substring(0, strText.Length - 1)
    End While

    txt.Text = strText
    txt.Select(txt.Text.Length, 0)
End Sub

Я также прикрепил обработчик .TextChanged к указанному тексту.

Предоставленный ответ позволяет пользователю печатать только в следующем формате, который я и просил.

What I want

Спасибо Wiktor!

Редактировать

В дополнение к этому сценарию существует случай, когда пользователь имеет возможность введите только символ минус вместо передачи пустой строки, если они не знают значения.

Для реализации этого я изменил шаблон RegEx следующим образом. Regex Demo

Я не уверен, что это самый эффективный способ, но, похоже, он работает для меня.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете использовать

^\d{1,2}(?:(?<=^\d{2})[A-Z]\d{0,2})?\z

См. Демо . NET regex онлайн (\z заменено на \r?$, так как демонстрация запускается для одной многострочной строки ).

Подробности

  • ^ - начало строки
  • \d{1,2} - одна или две цифры
  • (?: - начало группы без захвата:
    • (?<=^\d{2}) - проверка с положительным взглядом: в начале строки должны быть две цифры непосредственно слева от текущей позиции
    • [A-Z] - заглавная буква
    • \d{0,2} - 0, 1 или 2 цифры
  • )? - конец группы без захвата, повторите 1 или 0 раз (т.е. сделайте это необязательным)
  • (?:[A-Z]\d{0,2})? - необязательная последовательность заглавных букв, а затем 0, 1 или 2 цифры
  • \z - самый конец строка (в конце строки не допускается \n).
0 голосов
/ 09 марта 2020

Может быть, вы можете обрезать \ n (если есть) и использовать вместо него

"^[0-9]{2}[A-Z][0-9]{2}$"

?

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