winforms 如何在www.example.com中将文本框的一部分提取到另一个文本框vb.net

kuarbcqp  于 2023-05-23  发布在  .NET
关注(0)|答案(2)|浏览(136)

我想提取一个文本框的一部分到另一个文本框。因此,我有两个文本框,即txtuser和txtpassword。当扫描QR时,选择txtuser会自动将扫描结果分为txt.user和txtpassword。
谢谢

'This is the result of the QR barcode scanner
USERNAME : TEST-PASSWORD : TEST@123

'so the result I want

txtuser.txt     = TEST
txtPassword.txt = TEST@123
'code in keypress
 Private Sub txtUser_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtUser.KeyPress
 Const pattern As String = "USERNAME : (\S+)-PASSWORD : (\S+)"
  If e.KeyChar = ChrW(8) Then
        Dim m As Match = Regex.Match(txtUser.Text, pattern)
        If m.Success Then
  e.KeyChar = ControlChars.Back
            txtUser.Text = m.Groups(1).Value
            txtPassword.Text = m.Groups(2).Value
        Else
            'TODO: display some message
        End If
     End If
    End Sub

来自@OlivierJacotDescombes的答案更新截图
screenshot breakpoint
enter image description here
如果我使用的代码更新刚才然后在“txtuser”的完整结果的扫描出现然后我按下后退空间然后它会自动成为每个根据文本框

des4xlb0

des4xlb01#

可以使用正则表达式:

Dim input As String = "USERNAME : TEST-PASSWORD : TEST@123"
Dim pattern As String = "USERNAME : (\S+)-PASSWORD : (\S+)"
Dim m As Match = Regex.Match(input, pattern)

If m.Success Then
    Dim user As String = m.Groups(1).Value
    Dim password As String = m.Groups(2).Value
    Console.WriteLine($"User = {user}, Password = {password}")
Else
    Console.WriteLine("no match")
End If

控制台输出:

User = TEST, Password = TEST@123

正则表达式模式USERNAME : (\S+)-PASSWORD : (\S+)的解释:

  • (\S+)捕获组1和组2,组1和组2至少匹配一个非空格字符作为用户名和密码。
  • 其他一切都符合“原样”。

使用文本框:

Const pattern As String = "USERNAME : (\S+)-PASSWORD : (\S+)"
Dim m As Match = Regex.Match(txtUser.Text, pattern)

If m.Success Then
    txtUser.Text = m.Groups(1).Value
    txtPassword.Text = m.Groups(2).Value
Else
   'TODO: display some message
End If
dgenwo3n

dgenwo3n2#

除了@OlivierJacot-Descombes伟大的回答,你还可以拆分字符串

Dim input = "USERNAME : TEST-PASSWORD : TEST@123"
Dim split = input.Split({"-", ":"}, StringSplitOptions.RemoveEmptyEntries).Select(Function(s) s.Trim())
txtUser.Text = split(1)
txtPassword.Text = split(3)

这就要求字符-:不能在用户名和密码中使用。你可以看到它创建了一个不是那些字符的项目的可枚举数,所以你只需要为合适的字符串索引。

For Each s In split
    Debug.Print(s)
Next

用户名
测试
密码
测试@123

相关问题