Renille Ответов: 2

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


Привет! Итак, я пытался выполнить свое задание, и оно просит меня проверить альпанумерику, не зная, как это сделать, поэтому я заглянул в некоторые места в интернете и нашел наиболее читаемый для меня код, как показано ниже. но по какой-то причине это не работает, я что-то упускаю? Или я сделал что-то не так?

Что я уже пробовал:

Public Class LoginForm

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Form1.Close()
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Or TextBox2.Text = "" Then
            MsgBox("Username and password cannot be null")
        ElseIf TextBox1.Text.Length < 6 Or TextBox1.Text.Length > 16 Then
            MsgBox("Username and password length must be between 6 and 16")
        ElseIf TextBox2.Text.Length < 6 Or TextBox2.Text.Length > 16 Then
            MsgBox("Username and password length must be between 6 and 16")
        ElseIf IsAlphaNum(TextBox1.Text) = False Then
            MsgBox("Username must be alphanumeric")
        End If
    End Sub

    Private Function IsAlphaNum(ByVal strInputText As String) As Boolean
        Dim IsAlpha As Boolean = False
        If System.Text.RegularExpressions.Regex.IsMatch(strInputText, "^[a-zA-Z0-9]+$") Then
            IsAlpha = True
        Else
            IsAlpha = False
        End If
        Return IsAlpha
    End Function
End Class

2 Ответов

Рейтинг:
14

OriginalGriff

Ну, регулярное выражение должно работать. Но... вашему коду все равно, что произойдет, если он сработает или не сработает, потому что все, что вы делаете, - это ставите окно сообщения, если оно не сработает, и продолжаете.
Вероятно, вам нужно добавить предложение Else в обработчик щелчка, чтобы сделать что-то конкретное, когда шаблон действительно совпадает. Но мы не знаем, как должен работать ваш код, поэтому я не могу сказать, что именно.

Я бы предположил, что вы многое выиграете, если будете использовать отладчик, чтобы точно следить за тем, что происходит - мы не можем сделать это за вас!
Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.
Посмотрим, что ты сможешь узнать.


Renille

да, я просто хотел проверить, правильно ли работает код или нет, если да, то я начну создавать функцию того, что произойдет, если входные данные будут действительны. Я попробовал использовать точку останова и увидеть значение isAlpha шаг за шагом из строки, где начинается if в функции isAlpha. но isAlpha всегда возвращает истинное значение независимо от того, что я ввожу, например "qqqqqqqq", isAlpha должен получить ложное значение, верно? Или мне нужно было импортировать библиотеку? Я проверил другой код, и он требует, чтобы я импортировал библиотеку, но когда я использую этот код, он не требует от меня ничего импортировать, поэтому я использую этот

OriginalGriff

Нет! Ваша функция isAlpha допускает использование прописных и строчных букв, а также цифр.
Попробуйте 12+34, и это даст вам " ложь"

Renille

О боже, я думал, что функция вернет true только в том случае, если строка содержит строчные, прописные буквы и цифры, извините за это недоразумение. Спасибо! я нашел способ сделать это сейчас

OriginalGriff

Пожалуйста!
Как предложение, сделать копию Эспрессо

http://www.ultrapico.com/Expresso.htm

Это бесплатно, и он проверяет и генерирует регулярные выражения. Я часто использую его для тестирования и проверки регулярных выражений!

Рейтинг:
0

Patrice T

Ваш код может быть упрощен

Private Function IsAlphaNum(ByVal strInputText As String) As Boolean
    Dim IsAlpha As Boolean = False
    If System.Text.RegularExpressions.Regex.IsMatch(strInputText, "^[a-zA-Z0-9]+$") Then
        IsAlpha = True
    Else
        IsAlpha = False
    End If
    Return IsAlpha
End Function

к
Private Function IsAlphaNum(ByVal strInputText As String) As Boolean
    Dim IsAlpha As Boolean = False
    IsAlpha = System.Text.RegularExpressions.Regex.IsMatch(strInputText, "^[a-zA-Z0-9]+$")
    Return IsAlpha
End Function

и
Private Function IsAlphaNum(ByVal strInputText As String) As Boolean
    Return System.Text.RegularExpressions.Regex.IsMatch(strInputText, "^[a-zA-Z0-9]+$")
End Function


В случае, если вам нужно более сложное регулярное выражение:
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
Это показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Renille

спасибо за ваш ответ!

Patrice T

Вы приветствуете