Как сделать, чтобы текстовое поле powershell принимало только алфавитный или цифровой символ?

#powershell #textbox

#powershell #текстовое поле

Вопрос:

Я создаю с помощью powershell текстовое поле Windows form, и пользователям нужно вводить только цифровые или алфавитные символы.

Я нашел это использование в c#

 System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z ]")
  

Может быть, есть способ адаптировать его в powershell или нет

Часть моего кода

 ...
# TextBox
$textbox = New-Object System.Windows.Forms.TextBox
$textbox.AutoSize = $true
$textbox.Location = New-Object System.Drawing.Point(150,125)
$textbox.Name = 'textbox_sw'
$textbox.Size = New-Object System.Drawing.Size(220,20)
$textbox.Text = "Max11car"
$textbox.MaxLength = 11
$form.Add_Shown({$form.Activate(); $textbox.Focus()}) # donne le focus à la text box
#$textbox = New-Object System.Text.RegularExpressions.Regex.IsMatch($textbox.Text, "^[a-zA-Z0-9 ]")
#$textbox = New-Object System.Text.RegularExpressions.Regex($textbox.Text, "^[a-zA-Z0-9 ]")
...
  

Я ожидаю, что результат будет примерно таким AbCDef45, а не Ab% $ 58

Ответ №1:

Я предлагаю вам добавить Add_TextChanged() метод в текстовое поле, который немедленно удаляет любые символы, которые вы не разрешаете.

Что-то вроде этого:

 $textBox.Add_TextChanged({
    if ($this.Text -match '[^a-z 0-9]') {
        $cursorPos = $this.SelectionStart
        $this.Text = $this.Text -replace '[^a-z 0-9]',''
        # move the cursor to the end of the text:
        # $this.SelectionStart = $this.Text.Length

        # or leave the cursor where it was before the replace
        $this.SelectionStart = $cursorPos - 1
        $this.SelectionLength = 0
    }
})
  

Подробности регулярного выражения:

 [^a-z 0-9]    Match a single character NOT present in the list below:
              - a character in the range between “a” and “z”
              - the space character “ ”
              - a character in the range between0and9 

Комментарии:

1. спасибо, это было то, что я искал. Просто обратите внимание, что при вводе несанкционированного символа курсор возвращается влево .. есть ли способ переместить его вправо?