0

私はこれをやろうとしていたので、テキストボックスは文字しか受け入れませんが、検証は機能しません. 数字を入力しても処理され、最初の lblError の「詳細をありがとう」が表示されますが、実際には「有効な名前を入力してください」である必要があります。このタイプの問題に対する検証テストは IsNumeric に似ていますか? 助けてください

    Dim MyName As String
    If txtMyName.Text Then
        MyName = txtMyName.Text
        lblError.Text = "Thankyou for your details"
    Else
        lblError.Text = "Enter A Valid Name "

    End If

End Sub

クラス終了

そして、[a-zA-Z0-9] や RegEx パターンを使用しない単純な方法が必要です。これらを調査したため、使用できません。

ありがとうございました

4

6 に答える 6

4

テキスト文字列、つまり textbox1.text をチェックして、.Leave イベントにアルファベット以外の文字が含まれていないことを確認できます。たとえば、ユーザーがタブで次のコントロールに移動すると、エラーがキャッチされます。これは、正規表現 (この例では System.Text.RegularExpressions をインポート) を使用するか、テキストを「手動で」チェックすることができます。

Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
  If Not Regex.Match(TextBox1.Text, "^[a-z]*$", RegexOptions.IgnoreCase).Success Then
    MsgBox("Please enter alpha text only.")
    TextBox1.Focus()
  End If

End Sub

英字以外のキーが押されたらすぐにユーザーを停止したい場合は、.Leave イベントの代わりに TextChanged イベントを使用できます。

于 2013-01-04T17:17:25.157 に答える
2

正規表現は、これを行う最もクリーンな方法です。しかし、あなたは長い道のりを求めました...

これは、文字列からすべての大文字と小文字を削除することで機能し、それ以外はすべて残します。削除が完了した後の文字列の長さstringname.lengthを確認し、数値がゼロであることがわかった場合、検証は成功です。ただし、数値が 0 より大きい場合、文字列にはアルファベット以外の文字が含まれていました。

If (TextBox1.Text <> "") Then

    Dim userInput As String = TextBox1.Text
    Dim filteredUserInput As String = userInput

    Dim listOfLetters As String() = New String() {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
    ' go through each letter in the 'listOfLetters' array and replace that letter with.. nothing
    For Each letter In listOfLetters
        filteredUserInput = Replace(filteredUserInput, letter, "")
    Next

    ' now we have done the work - count how many characters are left in the string, if it is more than 0 we have invalid characters
    If (filteredUserInput <> "") Then
        MsgBox("This failed validation, contains invalid chars (" + Str(filteredUserInput.Length) + ")")
    Else
        MsgBox("This passed validation")
    End If

End If

または、機能化したい場合..

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    If (TextBox1.Text <> "") Then

        Dim userInput As String = TextBox1.Text
        ' if the 'isThisAValidString()' returns true then it is a valid (and has not faild validation) a-zA-Z
        If (isThisAValidString(userInput) = True) Then
            MsgBox("This is valid")
        Else
            MsgBox("This is not valid")
        End If

    End If

End Sub

Function isThisAValidString(input As String)

    Dim userInput As String = input
    Dim filteredUserInput As String = userInput

    Dim listOfLetters As String() = New String() {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
    ' go through each letter in the 'listOfLetters' array and replace that letter with.. nothing
    For Each letter In listOfLetters
        filteredUserInput = Replace(filteredUserInput, letter, "")
    Next

    ' now we have done the work - count how many characters are left in the string, if it is more than 0 we have invalid characters
    If (filteredUserInput <> "") Then
        ' this failed!
        Return False
    Else
        'this passed
        Return True
    End If

End Function
于 2013-01-04T22:11:37.147 に答える
1

なぜ正規表現ではないのですか?質問から何かを除外しない限り、これは仕事に適したツールです。

このようなすべての英字 (大文字) の配列を作成すると、名前のすべての文字が配列に含まれているかどうかを確認できます。

Private Shared Function IsLetters(s As String) As Boolean
    For Each c As Char In s.ToUpper().ToCharArray()
        If Not onlyLetters().Contains(c) Then
            Return False
        End If
    Next
    Return True
End Function

Private Shared Function onlyLetters() As Char()
    Dim strs = New List(Of Char)()
    Dim o As Char = "A"C
    For i As Integer = 0 To 25
        strs.Add(Convert.ToChar(o + i))
    Next

    Return strs.ToArray()
End Function
于 2013-01-04T17:33:04.627 に答える
0

ASCII 文字は使用できませんか? このような:

(キープレスイベント時)

If Asc(e.KeyChar) <> 8 Then
  If Asc(e.KeyChar) < 65 Or Asc(e.KeyChar) > 122 Then
  ' from 65 to 90 A - Z String is allowed ( Uppercase letter )
  ' from 97 to 122 a - z String is allowed ( Lowercase letter )
    If Asc(e.KeyChar) > 97 Or Asc(e.KeyChar) < 91 Or Asc(e.KeyChar) = 95 Then
  ' As we dont need to include letters between 91-96 we add this code. 
  ' ASCII CHARACTER 95 is Underscore Character.  so we add this manually.

      e.Handled = True

    End If
  End If
End If

「_」アンダースコアを許可する必要がない場合は、「Or Asc(e.KeyChar) = 95を削除し ます。これは簡単に行うことができます。自分で行うには、ASCII Character Table を参照する必要があります。ここでテーブルを表示できます

于 2014-09-21T18:19:35.520 に答える
0

まず、Unicode を使用していることに注意してください。

次に、Unicode は複雑です。特に、.NET 文字列は UTF-16 コード単位を使用し、そのうちの 1 つまたは 2 つがコードポイントをエンコードします。また、一部のコードポイントは「結合文字」です。これらは独立して立つことはできませんが、多くの場合、単独で、または文字の後に乗算されて表示されます。

以下は検証ロジックです。文字列を調べて、各テキスト要素 (別名書記素) の最初のコードポイントが Unicode 文字であることを確認します。

Dim input = "ØysteinRene"+ Char.ConvertFromUtf32(&H301) +"e Galois" 
'COMBINING ACUTE ACCENT' (U+0301)
Dim etor = System.Globalization.StringInfo.GetTextElementEnumerator(input)
While (etor.MoveNext()) 
    Dim grapheme = etor.GetTextElement()
    ' check the first codepoint in the grapheme 
    ' (others will only be "combining characters")
    If Not Char.IsLetter(grapheme,0) Then 
        Throw New Exception("Your input doesn't match my idea of a name at """  _
                             + grapheme + """")
    End If
End While

ところで、あなたの名前に対する見方は非常に狭いです。1 つの誤解を解くためにスペースを入れました。それは明らかなケースです。しかし、一般的に、ユーザーの名前が無効であると考えていることをユーザーに伝えたくありません。

于 2014-09-21T21:07:08.757 に答える