Фильтрация символов, которые можно добавить в текстовое поле

В моей форме есть ряд текстовых полей, и мой клиент хочет, чтобы я отфильтровал недопустимые символы, например, в поле name нельзя использовать символы или числа.

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

В основном, что должно произойти, так это то, что когда пользователь вводит такие символы, как $, ^, 5, * и т. д., функция должна распознать это и предотвратить их ввод в текстовое поле, означает ли это удаление их, как только они входят, или полное прерывание действия.

У кого-нибудь есть понимание этого? Все ценится, спасибо.


person Matt    schedule 27.01.2010    source источник


Ответы (1)


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

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    StripNonAlphabetCharacters(TextBox1)
End Sub

Public Sub StripNonAlphabetCharacters(ByVal input As TextBox)
    ' pattern matches any character that is NOT A-Z (allows upper and lower case alphabets)
    Dim rx As New Regex("[^a-zA-Z]")
    If (rx.IsMatch(input.Text)) Then
        Dim startPosition As Integer = input.SelectionStart - 1
        input.Text = rx.Replace(input.Text, "")
        input.SelectionStart = startPosition
    End If
End Sub

Фактический Regex следует сделать членом формы, чтобы он не объявлялся каждый раз или не помещался в какой-то общий класс для ссылки. Логика выбора используется для удержания курсора в его текущем местоположении после удаления недопустимых символов.


Для WinForms вы можете использовать класс MaskedTextBox. и задайте свойство Mask.

Для ASP.NET вы можете использовать элемент управления MaskedEdit из набора AJAX Toolkit. .

person Ahmad Mageed    schedule 27.01.2010
comment
Привет, спасибо за ответ. Хотя это решение сработает, на самом деле оно предназначено для проекта колледжа (клиент — мой колледж), и они хотят видеть какую-то функцию для обработки этого, а не для того, чтобы все это обрабатывалось с помощью предварительно созданного элемента управления. Но спасибо за участие, мне пригодится :) - person Matt; 28.01.2010
comment
@Matt Я обновил свой ответ для сценария WinForms. Вы можете написать аналогичную функцию, которая принимает строку вместо элемента управления текстовым полем и при необходимости возвращает удаленный результат. - person Ahmad Mageed; 28.01.2010